pax_global_header00006660000000000000000000000064152627621030014516gustar00rootroot0000000000000052 comment=acbfd5e34d3fe430b66ed1066a07e9d66324e1ef osm-gps-map-1.2.2/000077500000000000000000000000001526276210300136605ustar00rootroot00000000000000osm-gps-map-1.2.2/.github/000077500000000000000000000000001526276210300152205ustar00rootroot00000000000000osm-gps-map-1.2.2/.github/workflows/000077500000000000000000000000001526276210300172555ustar00rootroot00000000000000osm-gps-map-1.2.2/.github/workflows/ci.yml000066400000000000000000000021211526276210300203670ustar00rootroot00000000000000name: CI on: push: branches: [master] pull_request: branches: [master] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ autoconf \ autoconf-archive \ automake \ libtool \ gtk-doc-tools \ libglib2.0-dev \ libgtk-3-dev \ libsoup-3.0-dev \ libgirepository1.0-dev \ python3-gi \ python3-cairo \ python3-gi-cairo \ gir1.2-gtk-3.0 \ gir1.2-gdkpixbuf-2.0 \ xvfb - name: Build run: | ./autogen.sh --prefix=/usr make -j"$(nproc)" - name: make check run: make check - name: make distcheck run: make distcheck - name: Install and run Python tests run: | sudo make install xvfb-run --auto-servernum python3 -m unittest discover -v tests/ osm-gps-map-1.2.2/.github/workflows/pages.yml000066400000000000000000000044411526276210300211020ustar00rootroot00000000000000name: Pages # Tag is enough to publish (gtk-doc + Jekyll). A GitHub Release is # required only for the landing-page Download / News list. on: push: branches: - master tags: - "*" workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: pages cancel-in-progress: false jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v7 - name: Install gtk-doc dependencies run: | sudo apt-get update sudo apt-get install -y \ build-essential \ autoconf \ autoconf-archive \ automake \ libtool \ gtk-doc-tools \ libglib2.0-dev \ libgtk-3-dev \ libsoup-3.0-dev \ libgirepository1.0-dev - name: Build documentation run: | ./autogen.sh --prefix=/usr --enable-gtk-doc make -j"$(nproc)" test -d docs/reference/html - name: Write releases data env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | python3 scripts/releases-data.py \ --repo "${{ github.repository }}" \ --out website/_data/releases.json - name: Setup Ruby uses: ruby/setup-ruby@v1 with: ruby-version: "3.3" bundler-cache: true working-directory: website - name: Setup Pages id: pages uses: actions/configure-pages@v6 - name: Build with Jekyll working-directory: website env: JEKYLL_ENV: production run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" - name: Copy gtk-doc into site run: | mkdir -p website/_site/docs/reference rm -rf website/_site/docs/reference/html cp -a docs/reference/html website/_site/docs/reference/ - name: Upload artifact uses: actions/upload-pages-artifact@v5 with: path: website/_site deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v5 osm-gps-map-1.2.2/.gitignore000066400000000000000000000021121526276210300156440ustar00rootroot00000000000000*~ *.in *.la *.lo *.o *.deps/ *.libs/ *.tar.gz *.stamp *.bak INSTALL Makefile aclocal.m4 autom4te.cache/ compile config.guess config.h config.log config.status config.sub configure depcomp install-sh libtool ltmain.sh missing osmgpsmap-1.0.pc python/autom4te.cache/ python/build/ python/configure python/osmgpsmap.c src/Makefile src/mapviewer stamp-h1 ChangeLog .project .cproject .autotools .pydevproject gtk-doc.make omf.make xmldocs.make docs/reference/html/ docs/reference/tmpl/ docs/reference/xml/ docs/reference/libosmgpsmap-decl-list.txt docs/reference/libosmgpsmap-decl.txt docs/reference/libosmgpsmap-undeclared.txt docs/reference/libosmgpsmap-undocumented.txt docs/reference/libosmgpsmap-unused.txt docs/reference/libosmgpsmap.args docs/reference/libosmgpsmap.hierarchy docs/reference/libosmgpsmap.interfaces docs/reference/libosmgpsmap.prerequisites docs/reference/libosmgpsmap.signals docs/reference/version.xml examples/editable_track examples/polygon m4/gnome-compiler-flags.m4 m4/pkg.m4 website/_site/ website/.jekyll-cache/ website/.jekyll-metadata website/vendor/ website/.bundle/ osm-gps-map-1.2.2/AUTHORS000066400000000000000000000002071526276210300147270ustar00rootroot00000000000000Marcus Bauer 2008 John Stowers 2009 Everaldo Canuto 2009 osm-gps-map-1.2.2/COPYING000066400000000000000000000355031526276210300147210ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. osm-gps-map-1.2.2/Makefile.am000066400000000000000000000032761526276210300157240ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src examples docs # website/ is GitHub Pages (Jekyll). Not in SUBDIRS or EXTRA_DIST so # release tarballs stay the library (src, examples, gtk-doc). AM_DISTCHECK_CONFIGURE_FLAGS = \ --enable-gtk-doc \ --enable-glade-catalog ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} doc_DATA = \ README \ COPYING \ AUTHORS \ ChangeLog \ NEWS pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = osmgpsmap-1.0.pc if ENABLE_GLADE_CATALOG gladecatalog_DATA = osmgpsmap.xml endif # tests/test.py and osmgpsmap.xml ship in the tarball even if not installed. EXTRA_DIST = tests/test.py osmgpsmap.xml DISTCLEANFILES = gtk-doc.make # Drop generated ChangeLog on VPATH distclean only. distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi # Build ChangeLog from full git history for dist. NEWS is the curated release notes. ChangeLog: $(AM_V_GEN)if test -d "$(top_srcdir)/.git"; then \ (cd "$(top_srcdir)" && git log --stat -M -C --name-status --date=short --no-color) > $@.tmp \ && mv -f $@.tmp $@ \ || ($(RM) $@.tmp; \ echo "Failed to generate ChangeLog, your ChangeLog may be outdated" >&2; \ (test -f $@ || echo "git-log is required to generate this file" >> $@)); \ else \ test -f $@ || \ (echo "A git checkout and git-log is required to generate ChangeLog" >&2 && \ echo "A git checkout and git-log is required to generate this file" >> $@); \ fi .PHONY: ChangeLog osm-gps-map-1.2.2/NEWS000066400000000000000000000206201526276210300143570ustar00rootroot00000000000000Changes in master ================= Changes in 1.2.2 ================ * Don't use floats for division because of rounding errors; fixes center hopping (znuh) * Avoid div-by-zero in latlon2zoom when a latitude or longitude distance is zero (Hubert Kowalski) * Floor tile origin for negative map-x so overlays stay aligned (Hubert Kowalski) * Fix insert_point double-free (Hubert Kowalski) * Hold the map until tile downloads complete so leftover Soup callbacks cannot touch freed tile state (Hubert Kowalski) * Fix map redraw using width as height (Hubert Kowalski) * Show drawing on the map in the examples (Hubert Kowalski) * Add optional Glade catalog installation (Hubert Kowalski) * Correctly support LFS (David Paleino, Bas Couwenberg) Changes in 1.2.1 ====================== * Replace deprecated G_TYPE_INSTANCE_GET_PRIVATE and g_type_class_add_private (Patrick Salecker) * Add python unit tests (Patrick Salecker) * Fix python example addressing requiring map source (Jochen Sprickerhof) * Fix setting custom map source (Patrick Salecker) * Update catalog files (Davide Gessa) * Make libsoup minimum version 2.42 (Hubert Kowalski) * Manage segments across date change line (Paolo Benve) * Remove unnecessary warning about 2nd setup (Tormod Volden) * Add OpenTopoMap map source (Philipe Weyland) * Port to libsoup-3 (Sébastien Noel) * Fix pkg-config file (Sébastien Noel) * Move libsoup-3.0 to Requires.private in pkg-config (Grimmauld) * Make add_point a GObject Introspection method (loqs) * Close PixbufLoader before get_pixbuf in unit tests; fixes Glycin test failure (loqs) Changes in 1.2.0 ====================== * Change max allowed zoom for various maps (Rolf Eike Beer, Philipe Weyland) * Add copyright notices to maps (Patrick Salecker) * Add configureable user-agent property for apps to clearly identify themselves (Patrick Salecker) * Remove dependency on gnome-common (Patrick Salecker, Hubert Kowalski) * Add user_data support to points (Martijn Goedhart) * Add breakable and shade_alpha properties to polygons (Samuel Cowen) * Python example updated to Python3 (Felipe S. S. Schneider) * Add Glade catalog file for better glade integration (Davide Gessa) Changes in 1.1.0 ====================== * Add polygon support Samuel Cowen * Add osm_gps_map_zoom_fit_bbox Martijn Goedhart * Fix leaks Roman Lebedev * Remove Yahoo (API break) Quentin Glidic * Build fixes Quentin Glidic * Fix image rotation Christoph Gysin Changes in 1.0.2 ====================== * Fix build with new giscanner * Build fixes guillomovitch * Fix open-street-maps Andrew Gee Changes in 1.0.1 ====================== * Build fixes Changes in 1.0.0 ====================== * Gtk3 support (serge.noiraud@laposte.net) * Remove deprecated functionality * Add z-order property to map items * Fix Google Changes in 0.7.4 ====================== * Fix Google Changes in 0.7.3 ====================== * When using the mouse scroll wheel to zoom in, centre on the mouse pointer (as recommended by the HIG) * Doc updates * Bug fixes * Treat 403 errors as missing tiles * Bail if user queues too many tiles to download (DOS) * Limit retries of tile download on unspecified errors * Enforce gtk+-2.14 minimum * Fix Google Changes in 0.7.2 ====================== * Make osm_gps_map_point_{copy,free} public * Fix build against older gtk and pygtk/pygobject versions (Maemo) * Doc updates * Bug fixes Changes in 0.7.1 ====================== * Don't install mapviewer binary * Bug fixes * Doc updates Changes in 0.7.0 ====================== * Map auto center threshold is now adjustable via the auto-center-threshold property. * Build fixes * Provide a notify signal for tiles-queued and zoom * Improvements to changing source and tile-cache after map is constructed * Drawing of the gps marker can now be completely controlled by applications by implementing the draw_gps_point vfunc * GPS marker visibility can also be controlled using the show-gps-point property * GObject introspection support * Documentation using gtk-doc * Gtk-3.0 compatible (builds with -DGSEAL_ENABLE) * Massive improvements to the Image and Track functions and additional API cleanup. This release is not ABI compatible, however it is API compatible. All users are advised to update to the new API. A summary of these changes, and a porting guide follow; * Replace coord_t -> OsmGpsMapPoint * osm_gps_map_add_image -> osm_gps_map_image_add and now returns a OsmGpsMapImage * type that should be used when removing or modifying images * osm_gps_map_remove_image -> osm_gps_map_image_remove and now accepts this returned OsmGpsMapImage * pointer * osm_gps_map_clear_images -> osm_gps_map_image_remove_all * Track management is now done using the OsmGpsMapTrack object. This is a wrapper around a GSList of OsmGpsMapPoints. You should keep a copy of this object around. You can add single points to the track by calling osm_gps_map_track_add_point, and the map will update accordingly. You can change the visual appearance of the track via this object properties. * osm_gps_map_add_track -> osm_gps_map_track_add * osm_gps_map_replace_track. Modify the OsmGpsMapTrack object instead * osm_gps_map_clear_tracks -> osm_gps_map_track_remove_all * The gps functions are now just convenience wrappers around an internal OsmGpsMapTrack object * osm_gps_map_draw_gps -> osm_gps_map_gps_add * osm_gps_map_clear_gps -> osm_gps_map_gps_clear * osm_gps_map_screen_to_geographic -> osm_gps_map_convert_screen_to_geographic * osm_gps_map_geographic_to_screen -> osm_gps_map_convert_geographic_to_screen * osm_gps_map_get_co_ordinates -> osm_gps_map_get_event_location * osm_gps_map_set_mapcenter -> osm_gps_map_set_center_and_zoom Changes in 0.6.0 ====================== * Support libsoup-2.2 and libsoup-2.4 * Add a Add a OsmGpsMapLayer interface and a default OSD using the interface. OsdGpsMapOsd is one implementation of this interface which draws one or all of; scale, map center coords, zoom control, dpade control, center crosshair. Much of the drawing code was from Till Harbaum. * Make the drag limit a gobject property Changes in 0.5.0 ====================== * Note: Many of the improvements this release was based on code from Till Harbaum * GDK drawing is not supported anymore, you must have cairo installed * Use automake silent rules * Add keyboard navigation support to map widget * Draw GPS heading in position indicator * Allow disabling of tile cache * You can now change the map source at runtime * Redraw and performance improvements * Update python bindings * Build and run correctly on Windows * Add OPENCYCLEMAP and OSM_PUBLIC_TRANSPORT * A new "changed" signal. Connect to this to monitor when the map zoom/scroll or center changes. * Add osm_gps_map_source_is_valid Changes in 0.4.0 ====================== * Map can now be constructed by passing a MAP_SOURCE ID instead of the map repo uri * Fix iter safety when purging the tile cache * Fix for segfault when adding images to the map * Remove map repo uris from public API. They should now be retrieved using osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source) * Add osm_gps_map_get_scale * Implement a blank map source that just draws grey tiles * Demo application now stores maps in XDG_CACHE_DIR * Fix build and crashes on windows * Add getters for name and zoom * Add a more complete python example * Add ability to purge the cache Changes in 0.3.0 ====================== * A new major contributor, Alberto Mardegan, worked on many of the new features of this release. Thanks a lot Alberto! * Draw map tracks with Cairo by default. * Interpolate between zoom levels while waiting for a tile to download. * Stop using GET_PRIVATE, and cache priv* for performance. * Keep an extra border of images offscreen for smoother scrolling at the edges of the map. * Keep the last N tiles in memory to improve render performance (previously they were loaded from disk) * Add some new api; osm_gps_set_center, osm_gps_map_scroll. osm-gps-map-1.2.2/README000066400000000000000000000005321526276210300145400ustar00rootroot00000000000000osm-gps-map is a Gtk mapping widget (and Python bindings) that when given GPS co-ordinates, draws a GPS track, and points of interest on a moving map display. osm-gps-map Downloads map data from a number of websites, including openstreetmap.org, openaerialmap.org and others and can be used to build desktop mapping or geolocation applications. osm-gps-map-1.2.2/autogen.sh000077500000000000000000000020601526276210300156570ustar00rootroot00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. test -n "$srcdir" || srcdir=$(dirname "$0") test -n "$srcdir" || srcdir=. olddir=$(pwd) cd $srcdir (test -f configure.ac) || { echo "*** ERROR: Directory '$srcdir' does not look like the top-level project directory ***" exit 1 } # shellcheck disable=SC2016 PKG_NAME=$(autoconf --trace 'AC_INIT:$1' configure.ac) if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then echo "*** WARNING: I am going to run 'configure' with no arguments." >&2 echo "*** If you wish to pass any to it, please specify them on the" >&2 echo "*** '$0' command line." >&2 echo "" >&2 fi aclocal --install || exit 1 gtkdocize --copy || exit 1 autoreconf --verbose --force --install || exit 1 cd "$olddir" if [ "$NOCONFIGURE" = "" ]; then $srcdir/configure "$@" || exit 1 if [ "$1" = "--help" ]; then exit 0 else echo "Now type 'make' to compile $PKG_NAME" || exit 1 fi else echo "Skipping configure process." fi osm-gps-map-1.2.2/configure.ac000066400000000000000000000061421526276210300161510ustar00rootroot00000000000000AC_PREREQ([2.63]) AC_INIT([osm-gps-map], [1.2.2], [http://github.com/nzjrs/osm-gps-map/issues], [osm-gps-map]) AX_IS_RELEASE([git-directory]) AM_INIT_AUTOMAKE([1.11 foreign subdir-objects parallel-tests]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([src/osm-gps-map.h]) AC_CONFIG_MACRO_DIR([m4]) AX_REQUIRE_DEFINED([GTK_DOC_CHECK]) AM_PROG_CC_C_O AC_LIBTOOL_WIN32_DLL AM_PROG_LIBTOOL AM_SILENT_RULES([yes]) AC_SYS_LARGEFILE # Library dependencies PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.16]) PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.0]) PKG_CHECK_MODULES(CAIRO, [cairo >= 1.8]) PKG_CHECK_MODULES(SOUP30, [libsoup-3.0]) # The mapviewer demo also calls g_thread_init, so it needs to link against # libgthread-2.0. PKG_CHECK_MODULES(GTHREAD, [gthread-2.0]) AC_ARG_ENABLE([glade-catalog], [AS_HELP_STRING([--enable-glade-catalog], [install the Glade catalog (default=no)])], [enable_glade_catalog=$enableval], [enable_glade_catalog=no]) case "$enable_glade_catalog" in yes|no) ;; *) AC_MSG_ERROR([--enable-glade-catalog accepts only yes or no]) ;; esac AM_CONDITIONAL([ENABLE_GLADE_CATALOG], [test "x$enable_glade_catalog" = xyes]) AC_ARG_WITH([glade-catalogdir], [AS_HELP_STRING([--with-glade-catalogdir=PATH], [Glade catalog directory (default=DATADIR/glade/catalogs)])], [gladecatalogdir=$withval], [gladecatalogdir='${datadir}/glade/catalogs']) if test "${with_glade_catalogdir+set}" = set; then case "$with_glade_catalogdir" in yes|no|'') AC_MSG_ERROR([--with-glade-catalogdir requires a directory path]) ;; esac if test "x$enable_glade_catalog" != xyes; then AC_MSG_ERROR([--with-glade-catalogdir requires --enable-glade-catalog]) fi fi AC_SUBST([gladecatalogdir]) AC_CHECK_FUNCS(gdk_event_get_scroll_deltas) AC_MSG_CHECKING([for Win32]) case "$host" in *-*-mingw*) os_win32=yes ;; *) os_win32=no ;; esac AC_MSG_RESULT([$os_win32]) AM_CONDITIONAL(OS_WIN32, [test $os_win32 = yes]) # Before making a release, the LT_VERSION_INFO string should be modified. # The string is of the form C:R:A. # - If interfaces have been changed or added, but binary compatibility has # been preserved, change to C+1:0:A+1 # - If binary compatibility has been broken (eg removed or changed interfaces) # change to C+1:0:0 # - If the interface is the same as the previous version, change to C:R+1:A LT_VERSION_INFO=2:2:1 AC_SUBST(LT_VERSION_INFO) GOBJECT_INTROSPECTION_REQS=0.10.0 GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_REQS]) GTK_DOC_CHECK([1.12]) AC_OUTPUT([ osmgpsmap-1.0.pc Makefile src/Makefile docs/Makefile examples/Makefile docs/reference/Makefile docs/reference/version.xml ]) echo echo $PACKAGE v$VERSION echo echo Prefix............... : $prefix echo Introspection support : ${found_introspection} echo gtk-doc documentation : ${enable_gtk_doc} echo Glade catalog........ : ${enable_glade_catalog} if test "x$enable_glade_catalog" = xyes; then echo Glade catalog dir.... : ${gladecatalogdir} fi echo osm-gps-map-1.2.2/docs/000077500000000000000000000000001526276210300146105ustar00rootroot00000000000000osm-gps-map-1.2.2/docs/Makefile.am000066400000000000000000000000241526276210300166400ustar00rootroot00000000000000SUBDIRS = reference osm-gps-map-1.2.2/docs/reference/000077500000000000000000000000001526276210300165465ustar00rootroot00000000000000osm-gps-map-1.2.2/docs/reference/Makefile.am000066400000000000000000000057701526276210300206130ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE=libosmgpsmap # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting the functions and macros. # e.g. DOC_SOURCE_DIR=../../../gtk DOC_SOURCE_DIR=../../src # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=osm_gps_map_ # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Add the builddir to the HTML path so that version.xml is found MKHTML_OPTIONS=--path="$(abs_builddir)" # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/src/*.h CFILE_GLOB=$(top_srcdir)/src/*.c # Header files to ignore when scanning. # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= \ converter.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files=version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. AM_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) AM_CFLAGS=-I$(top_srcdir) -I$(top_builddir) \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(CAIRO_CFLAGS) \ $(SOUP30_CFLAGS) GTKDOC_LIBS=$(top_builddir)/src/libosmgpsmap-1.0.la \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(CAIRO_LIBS) \ $(SOUP30_LIBS) # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += version.xml.in # disable gtkdoc-check, I hate it #if ENABLE_GTK_DOC #TESTS_ENVIRONMENT = cd $(srcdir) && #TESTS = $(GTKDOC_CHECK) #endif osm-gps-map-1.2.2/docs/reference/libosmgpsmap-docs.xml000066400000000000000000000025601526276210300227160ustar00rootroot00000000000000 ]> OsmGpsMap Reference Manual API Reference Index of all symbols Index of deprecated symbols Annotation glossary osm-gps-map-1.2.2/docs/reference/libosmgpsmap-overrides.txt000066400000000000000000000000001526276210300237720ustar00rootroot00000000000000osm-gps-map-1.2.2/docs/reference/libosmgpsmap-sections.txt000066400000000000000000000047561526276210300236450ustar00rootroot00000000000000
osm-gps-map OsmGpsMap OsmGpsMap OsmGpsMapClass OSM_GPS_MAP_INVALID OSM_GPS_MAP_CACHE_DISABLED OSM_GPS_MAP_CACHE_AUTO OSM_GPS_MAP_CACHE_FRIENDLY osm_gps_map_get_default_cache_directory OsmGpsMapSource_t osm_gps_map_source_get_friendly_name osm_gps_map_source_get_repo_uri osm_gps_map_source_get_image_format osm_gps_map_source_get_min_zoom osm_gps_map_source_get_max_zoom osm_gps_map_source_is_valid osm_gps_map_new osm_gps_map_download_maps osm_gps_map_download_cancel_all osm_gps_map_get_bbox osm_gps_map_set_center osm_gps_map_set_center_and_zoom osm_gps_map_set_zoom osm_gps_map_zoom_in osm_gps_map_zoom_out osm_gps_map_scroll osm_gps_map_get_scale OsmGpsMapKey_t osm_gps_map_set_keyboard_shortcut osm_gps_map_get_event_location osm_gps_map_convert_geographic_to_screen osm_gps_map_convert_screen_to_geographic osm_gps_map_gps_add osm_gps_map_gps_clear osm_gps_map_gps_get_track osm_gps_map_track_add osm_gps_map_track_remove osm_gps_map_track_remove_all osm_gps_map_image_add osm_gps_map_image_add_with_alignment osm_gps_map_image_remove osm_gps_map_image_remove_all osm_gps_map_layer_add osm_gps_map_layer_remove osm_gps_map_layer_remove_all
osm-gps-map-layer OsmGpsMapLayer OsmGpsMapLayer osm_gps_map_layer_render osm_gps_map_layer_draw osm_gps_map_layer_busy osm_gps_map_layer_button_press OsmGpsMapOsd OsmGpsMapOsdClass osm_gps_map_osd_new
osm-gps-map-image OsmGpsMapImage OsmGpsMapImage OsmGpsMapImageClass osm_gps_map_image_draw osm_gps_map_image_get_point osm_gps_map_image_get_type osm_gps_map_image_new
osm-gps-map-point OsmGpsMapPoint OsmGpsMapPoint osm_gps_map_point_get_degrees osm_gps_map_point_get_radians osm_gps_map_point_get_user_data osm_gps_map_point_new_degrees osm_gps_map_point_new_degrees_with_user_data osm_gps_map_point_new_radians osm_gps_map_point_new_radians_with_user_data osm_gps_map_point_set_degrees osm_gps_map_point_set_radians osm_gps_map_point_set_user_data osm_gps_map_point_copy osm_gps_map_point_free
osm-gps-map-track OsmGpsMapTrack OsmGpsMapTrack OsmGpsMapTrackClass osm_gps_map_track_add_point osm_gps_map_track_get_color osm_gps_map_track_get_points osm_gps_map_track_get_length osm_gps_map_track_get_point osm_gps_map_track_insert_point osm_gps_map_track_n_points osm_gps_map_track_remove_point osm_gps_map_track_set_color osm_gps_map_track_new
osm-gps-map-1.2.2/docs/reference/libosmgpsmap.types000066400000000000000000000002321526276210300223260ustar00rootroot00000000000000osm_gps_map_get_type osm_gps_map_layer_get_type osm_gps_map_osd_get_type osm_gps_map_image_get_type osm_gps_map_track_get_type osm_gps_map_point_get_type osm-gps-map-1.2.2/docs/reference/version.xml.in000066400000000000000000000000251526276210300213570ustar00rootroot00000000000000@AC_PACKAGE_VERSION@ osm-gps-map-1.2.2/examples/000077500000000000000000000000001526276210300154765ustar00rootroot00000000000000osm-gps-map-1.2.2/examples/.gitignore000066400000000000000000000000121526276210300174570ustar00rootroot00000000000000mapviewer osm-gps-map-1.2.2/examples/Makefile.am000066400000000000000000000030401526276210300175270ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in OSMGPSMAP_CFLAGS = \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(CAIRO_CFLAGS) \ $(SOUP30_CFLAGS) OSMGPSMAP_LIBS = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(CAIRO_LIBS) \ $(SOUP30_LIBS) ## Demo Application noinst_PROGRAMS = mapviewer polygon editable_track mapviewer_SOURCES = \ mapviewer.c mapviewer_CFLAGS = \ -I$(top_srcdir)/src \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(OSMGPSMAP_CFLAGS) \ $(GTHREAD_CFLAGS) mapviewer_LDADD = \ $(OSMGPSMAP_LIBS) \ $(GTHREAD_LIBS) \ $(top_builddir)/src/libosmgpsmap-1.0.la polygon_SOURCES = \ polygon.c polygon_CFLAGS = \ -I$(top_srcdir)/src \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(OSMGPSMAP_CFLAGS) \ $(GTHREAD_CFLAGS) polygon_LDADD = \ $(OSMGPSMAP_LIBS) \ $(GTHREAD_LIBS) \ $(top_builddir)/src/libosmgpsmap-1.0.la editable_track_SOURCES = \ editable_track.c editable_track_CFLAGS = \ -I$(top_srcdir)/src \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(OSMGPSMAP_CFLAGS) \ $(GTHREAD_CFLAGS) editable_track_LDADD = \ $(OSMGPSMAP_LIBS) \ $(GTHREAD_LIBS) \ $(top_builddir)/src/libosmgpsmap-1.0.la ## Misc EXTRA_DIST = poi.png mapviewer.ui mapviewer.py mapviewer.js README osm-gps-map-1.2.2/examples/README000066400000000000000000000033461526276210300163640ustar00rootroot00000000000000osm-gps-map example applications Run C and Python demos from this directory (examples) so they find mapviewer.ui and poi.png. If running uninstalled, you probably need to tell GObject introspection where to find the bindings. Do the following from the example directory: export LD_LIBRARY_PATH=../src/.libs/ export GI_TYPELIB_PATH=../src/ * ./mapviewer C based demo app with many options. See '--help' for a list of options. --editable-tracks makes the right-click track draggable. * ./polygon This example demonstrates editable polygons. Vertices can be dragged. Clicking mid-points divides the line and creates another vertex. * ./editable_track One editable track. Same degree constructor as polygon. * ./mapviewer.py Python version of the C demo app, with examples showing how to do custom layers: DrawLayer class for cairo overlay, GPS, programmatic image_add, and track_add. * ./mapviewer.js Javascript example using seed + gobject-introspection. Examples for drawing on the map: * Double-left-click places a GPS point (blue ball+random heading). * Double-right-click (or Ctrl+double-left) adds points to tracks. Triple right click clears the track (a new empty track stays on the map). This shows the use of track_add, add_point and track_remove * Double-middle-click (or Shift+double-left) adds a marker via image_add. Python: poi.png by default, or uncheck "Use poi.png for markers" to paint a cairo star (programmatic pixbuf). C: poi.png, or a cairo star if that file is missing. Triple middle click removes the last image. * DrawLayer in mapviewer and mapviewer.py uses live cairo to draw a red house at Home location (Timaru). Peak of the roof is at the lat/lon of Home location. osm-gps-map-1.2.2/examples/editable_track.c000066400000000000000000000016101526276210300205750ustar00rootroot00000000000000#include #include "osm-gps-map.h" int main (int argc, char *argv[]) { OsmGpsMap *map; GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Window"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); map = g_object_new (OSM_TYPE_GPS_MAP, NULL); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(map)); OsmGpsMapTrack* track = osm_gps_map_track_new(); OsmGpsMapPoint* p1, *p2; p1 = osm_gps_map_point_new_degrees(72.0, -28.0); p2 = osm_gps_map_point_new_degrees(61.0, -43.0); osm_gps_map_track_add_point(track, p1); osm_gps_map_track_add_point(track, p2); g_object_set(track, "editable", TRUE, NULL); osm_gps_map_track_add(map, track); gtk_widget_show (GTK_WIDGET(map)); gtk_widget_show (window); gtk_main (); return 0; } osm-gps-map-1.2.2/examples/env.sh000077500000000000000000000002011526276210300166160ustar00rootroot00000000000000#!/bin/sh export LD_LIBRARY_PATH=../src/.libs/ export GI_TYPELIB_PATH=$GI_TYPELIB_PATH:../src/ export PYTHONPATH=../python/ $1 osm-gps-map-1.2.2/examples/mapviewer.c000066400000000000000000000455661526276210300176610ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 cino=t0,(0: */ /* * main.c * Copyright (C) John Stowers 2008 * * This is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License * as published by the Free Software Foundation; version 2. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include #include "osm-gps-map.h" static OsmGpsMapSource_t opt_map_provider = OSM_GPS_MAP_SOURCE_OPENSTREETMAP; static gboolean opt_friendly_cache = FALSE; static gboolean opt_no_cache = FALSE; static char *opt_cache_base_dir = NULL; static gboolean opt_editable_tracks = FALSE; static GOptionEntry entries[] = { { "friendly-cache", 'f', 0, G_OPTION_ARG_NONE, &opt_friendly_cache, "Store maps using friendly cache style (source name)", NULL }, { "no-cache", 'n', 0, G_OPTION_ARG_NONE, &opt_no_cache, "Disable cache", NULL }, { "cache-basedir", 'b', 0, G_OPTION_ARG_FILENAME, &opt_cache_base_dir, "Cache basedir", NULL }, { "map", 'm', 0, G_OPTION_ARG_INT, &opt_map_provider, "Map source", "N" }, { "editable-tracks", 'e', 0, G_OPTION_ARG_NONE, &opt_editable_tracks, "Make the tracks editable", NULL }, { NULL } }; #if !GTK_CHECK_VERSION(3,22,0) // use --gtk-debug=updates instead on newer GTK static gboolean opt_debug = FALSE; static GOptionEntry debug_entries[] = { { "debug", 'd', 0, G_OPTION_ARG_NONE, &opt_debug, "Enable debugging", NULL }, { NULL } }; #endif /* Shared with mapviewer.py DrawLayer Home (Timaru). */ #define HOME_LAT -44.39 #define HOME_LON 171.25 #define HOME_ZOOM 12 typedef struct _DrawLayer { GObject parent; } DrawLayer; typedef struct _DrawLayerClass { GObjectClass parent_class; } DrawLayerClass; static void draw_layer_interface_init (OsmGpsMapLayerIface *iface); G_DEFINE_TYPE_WITH_CODE (DrawLayer, draw_layer, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER, draw_layer_interface_init)); static void draw_layer_draw (OsmGpsMapLayer *layer G_GNUC_UNUSED, OsmGpsMap *map, cairo_t *cr) { OsmGpsMapPoint *pt; gint x, y; pt = osm_gps_map_point_new_degrees (HOME_LAT, HOME_LON); osm_gps_map_convert_geographic_to_screen (map, pt, &x, &y); osm_gps_map_point_free (pt); cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.6); cairo_move_to (cr, x, y); cairo_line_to (cr, x + 12, y + 10); cairo_line_to (cr, x + 12, y + 24); cairo_line_to (cr, x - 12, y + 24); cairo_line_to (cr, x - 12, y + 10); cairo_close_path (cr); cairo_fill (cr); } static void draw_layer_render (OsmGpsMapLayer *layer G_GNUC_UNUSED, OsmGpsMap *map G_GNUC_UNUSED) { } static gboolean draw_layer_busy (OsmGpsMapLayer *layer G_GNUC_UNUSED) { return FALSE; } static gboolean draw_layer_button_press (OsmGpsMapLayer *layer G_GNUC_UNUSED, OsmGpsMap *map G_GNUC_UNUSED, GdkEventButton *event G_GNUC_UNUSED) { return FALSE; } static void draw_layer_interface_init (OsmGpsMapLayerIface *iface) { iface->render = draw_layer_render; iface->draw = draw_layer_draw; iface->busy = draw_layer_busy; iface->button_press = draw_layer_button_press; } static void draw_layer_class_init (DrawLayerClass *klass G_GNUC_UNUSED) { } static void draw_layer_init (DrawLayer *self G_GNUC_UNUSED) { } static GdkPixbuf *g_star_image = NULL; static OsmGpsMapImage *g_last_image = NULL; static OsmGpsMapTrack *g_click_track = NULL; /* Programmatic marker if poi.png is missing. Live cairo overlay is DrawLayer. */ static GdkPixbuf * star_pixbuf_new (int size) { cairo_surface_t *surface; cairo_t *cr; GdkPixbuf *pixbuf; int i; double outer = size / 2.0 - 1.0; double inner = size / 5.0; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, size, size); cr = cairo_create (surface); cairo_translate (cr, size / 2.0, size / 2.0); cairo_move_to (cr, 0, -outer); for (i = 1; i < 10; i++) { cairo_rotate (cr, G_PI / 5.0); cairo_line_to (cr, 0, (i % 2 == 0) ? -outer : -inner); } cairo_close_path (cr); cairo_set_source_rgb (cr, 1.0, 0.85, 0.0); cairo_fill_preserve (cr); cairo_set_source_rgb (cr, 0.75, 0.45, 0.0); cairo_set_line_width (cr, 1); cairo_stroke (cr); pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, size, size); cairo_destroy (cr); cairo_surface_destroy (surface); return pixbuf; } static OsmGpsMapTrack * click_track_new (void) { OsmGpsMapTrack *track = osm_gps_map_track_new (); if (opt_editable_tracks) g_object_set (track, "editable", TRUE, NULL); return track; } static gboolean on_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data G_GNUC_UNUSED) { OsmGpsMapPoint coord; float lat, lon; OsmGpsMap *map = OSM_GPS_MAP(widget); /* 2BUTTON_PRESS often has BUTTONn_MASK set; ignore those, keep Shift/Ctrl. */ GdkModifierType mods = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK); int left_button = (event->button == 1) && (mods == 0); int middle_button = (event->button == 2) || ((event->button == 1) && (event->state & GDK_SHIFT_MASK)); int right_button = (event->button == 3) || ((event->button == 1) && (event->state & GDK_CONTROL_MASK)); osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, &coord); osm_gps_map_point_get_degrees(&coord, &lat, &lon); if (event->type == GDK_3BUTTON_PRESS) { if (middle_button) { if (g_last_image) { osm_gps_map_image_remove (map, g_last_image); g_last_image = NULL; } } if (right_button) { osm_gps_map_track_remove (map, g_click_track); g_object_unref (g_click_track); g_click_track = click_track_new (); osm_gps_map_track_add (map, g_click_track); } } else if (event->type == GDK_2BUTTON_PRESS) { if (left_button) { osm_gps_map_gps_add (map, lat, lon, g_random_double_range(0,360)); } if (middle_button && g_star_image) { g_last_image = osm_gps_map_image_add (map, lat, lon, g_star_image); } if (right_button) { osm_gps_map_track_add_point(g_click_track, &coord); } } return FALSE; } static gboolean on_map_changed_event (GtkWidget *widget, gpointer user_data) { float lat,lon; GtkEntry *entry = GTK_ENTRY(user_data); OsmGpsMap *map = OSM_GPS_MAP(widget); g_object_get(map, "latitude", &lat, "longitude", &lon, NULL); gchar *msg = g_strdup_printf("Map Centre: latitude %f longitude %f",lat,lon); gtk_entry_set_text(entry, msg); g_free(msg); return FALSE; } static gboolean on_zoom_in_clicked_event (GtkWidget *widget, gpointer user_data) { int zoom; OsmGpsMap *map = OSM_GPS_MAP(user_data); g_object_get(map, "zoom", &zoom, NULL); osm_gps_map_set_zoom(map, zoom+1); return FALSE; } static gboolean on_zoom_out_clicked_event (GtkWidget *widget, gpointer user_data) { int zoom; OsmGpsMap *map = OSM_GPS_MAP(user_data); g_object_get(map, "zoom", &zoom, NULL); osm_gps_map_set_zoom(map, zoom-1); return FALSE; } static gboolean on_home_clicked_event (GtkWidget *widget, gpointer user_data) { OsmGpsMap *map = OSM_GPS_MAP(user_data); osm_gps_map_set_center_and_zoom(map, HOME_LAT, HOME_LON, HOME_ZOOM); return FALSE; } static gboolean on_cache_clicked_event (GtkWidget *widget, gpointer user_data) { OsmGpsMap *map = OSM_GPS_MAP(user_data); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { int zoom,max_zoom; OsmGpsMapPoint pt1, pt2; osm_gps_map_get_bbox(map, &pt1, &pt2); g_object_get(map, "zoom", &zoom, "max-zoom", &max_zoom, NULL); osm_gps_map_download_maps(map, &pt1, &pt2, zoom, max_zoom); } else { osm_gps_map_download_cancel_all(map); } return FALSE; } static void on_tiles_queued_changed (OsmGpsMap *image, GParamSpec *pspec, gpointer user_data) { gchar *s; int tiles; GtkLabel *label = GTK_LABEL(user_data); g_object_get(image, "tiles-queued", &tiles, NULL); s = g_strdup_printf("%d", tiles); gtk_label_set_text(label, s); g_free(s); } static void on_gps_alpha_changed (GtkAdjustment *adjustment, gpointer user_data) { OsmGpsMap *map = OSM_GPS_MAP(user_data); OsmGpsMapTrack *track = osm_gps_map_gps_get_track (map); float f = gtk_adjustment_get_value(adjustment); g_object_set (track, "alpha", f, NULL);} static void on_gps_width_changed (GtkAdjustment *adjustment, gpointer user_data) { OsmGpsMap *map = OSM_GPS_MAP(user_data); OsmGpsMapTrack *track = osm_gps_map_gps_get_track (map); float f = gtk_adjustment_get_value(adjustment); g_object_set (track, "line-width", f, NULL); } static void on_star_align_changed (GtkAdjustment *adjustment, gpointer user_data) { const char *propname = user_data; float f = gtk_adjustment_get_value(adjustment); if (g_last_image) g_object_set (g_last_image, propname, f, NULL); } #if GTK_CHECK_VERSION(3,4,0) static void on_gps_color_changed (GtkColorChooser *widget, gpointer user_data) { GdkRGBA c; OsmGpsMapTrack *track = OSM_GPS_MAP_TRACK(user_data); gtk_color_chooser_get_rgba (widget, &c); osm_gps_map_track_set_color(track, &c); } #else static void on_gps_color_changed (GtkColorButton *widget, gpointer user_data) { GdkRGBA c; OsmGpsMapTrack *track = OSM_GPS_MAP_TRACK(user_data); gtk_color_button_get_rgba (widget, &c); osm_gps_map_track_set_color(track, &c); } #endif static void on_close (GtkWidget *widget, gpointer user_data) { gtk_widget_destroy(widget); gtk_main_quit(); } static void usage (GOptionContext *context) { int i; puts(g_option_context_get_help(context, TRUE, NULL)); printf("Valid map sources:\n"); for(i=OSM_GPS_MAP_SOURCE_NULL; i <= OSM_GPS_MAP_SOURCE_LAST; i++) { const char *name = osm_gps_map_source_get_friendly_name(i); const char *uri = osm_gps_map_source_get_repo_uri(i); if (uri != NULL) printf("\t%d:\t%s\n",i,name); } } int main (int argc, char **argv) { GtkBuilder *builder; GtkWidget *widget; GtkAccelGroup *ag; OsmGpsMap *map; OsmGpsMapLayer *osd, *draw; const char *repo_uri; char *cachedir, *cachebasedir; GError *error = NULL; GOptionContext *context; gtk_init (&argc, &argv); context = g_option_context_new ("- Map browser"); g_option_context_set_help_enabled(context, FALSE); g_option_context_add_main_entries (context, entries, NULL); #if !GTK_CHECK_VERSION(3,22,0) g_option_context_add_main_entries (context, debug_entries, NULL); #endif if (!g_option_context_parse (context, &argc, &argv, &error)) { usage(context); return 1; } /* Only use the repo_uri to check if the user has supplied a valid map source ID */ repo_uri = osm_gps_map_source_get_repo_uri(opt_map_provider); if ( repo_uri == NULL ) { usage(context); return 2; } cachebasedir = osm_gps_map_get_default_cache_directory(); if (opt_cache_base_dir && g_file_test(opt_cache_base_dir, G_FILE_TEST_IS_DIR)) { cachedir = g_strdup(OSM_GPS_MAP_CACHE_AUTO); cachebasedir = g_strdup(opt_cache_base_dir); } else if (opt_friendly_cache) { cachedir = g_strdup(OSM_GPS_MAP_CACHE_FRIENDLY); } else if (opt_no_cache) { cachedir = g_strdup(OSM_GPS_MAP_CACHE_DISABLED); } else { cachedir = g_strdup(OSM_GPS_MAP_CACHE_AUTO); } #if !GTK_CHECK_VERSION(3,22,0) // use --gtk-debug=updates on newer gtk if (opt_debug) gdk_window_set_debug_updates(TRUE); #endif g_debug("Map Cache Dir: %s", cachedir); g_debug("Map Provider: %s (%d)", osm_gps_map_source_get_friendly_name(opt_map_provider), opt_map_provider); map = g_object_new (OSM_TYPE_GPS_MAP, "map-source",opt_map_provider, "tile-cache",cachedir, "tile-cache-base", cachebasedir, "proxy-uri",g_getenv("http_proxy"), "user-agent", "mapviewer.c", // Always set user-agent, for better tile-usage compliance NULL); osd = g_object_new (OSM_TYPE_GPS_MAP_OSD, "show-scale",TRUE, "show-coordinates",TRUE, "show-crosshair",TRUE, "show-dpad",TRUE, "show-zoom",TRUE, "show-gps-in-dpad",TRUE, "show-gps-in-zoom",FALSE, "dpad-radius", 30, NULL); osm_gps_map_layer_add(OSM_GPS_MAP(map), osd); g_object_unref(G_OBJECT(osd)); draw = g_object_new (draw_layer_get_type (), NULL); osm_gps_map_layer_add (OSM_GPS_MAP (map), draw); g_object_unref (draw); /* Stay put on gps_add so the blue blob is not under the OSD crosshair. */ g_object_set (map, "auto-center", FALSE, NULL); g_click_track = click_track_new (); osm_gps_map_track_add (OSM_GPS_MAP (map), g_click_track); osm_gps_map_set_center_and_zoom (map, HOME_LAT, HOME_LON, HOME_ZOOM); g_free(cachedir); g_free(cachebasedir); //Enable keyboard navigation osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_FULLSCREEN, GDK_KEY_F11); osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_UP, GDK_KEY_Up); osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_DOWN, GDK_KEY_Down); osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_LEFT, GDK_KEY_Left); osm_gps_map_set_keyboard_shortcut(map, OSM_GPS_MAP_KEY_RIGHT, GDK_KEY_Right); //Build the UI { GError *pixbuf_err = NULL; g_star_image = gdk_pixbuf_new_from_file_at_size ("poi.png", 24, 24, &pixbuf_err); if (!g_star_image) { g_printerr ("poi.png: %s\n", pixbuf_err ? pixbuf_err->message : "missing"); g_clear_error (&pixbuf_err); g_star_image = star_pixbuf_new (24); } } builder = gtk_builder_new(); gtk_builder_add_from_file (builder, "mapviewer.ui", &error); if (error) g_error ("ERROR: %s\n", error->message); gtk_box_pack_start ( GTK_BOX(gtk_builder_get_object(builder, "map_box")), GTK_WIDGET(map), TRUE, TRUE, 0); //Init values float lw,a; GdkRGBA c; OsmGpsMapTrack *gpstrack = osm_gps_map_gps_get_track (map); g_object_get (gpstrack, "line-width", &lw, "alpha", &a, NULL); osm_gps_map_track_get_color(gpstrack, &c); gtk_adjustment_set_value ( GTK_ADJUSTMENT(gtk_builder_get_object(builder, "gps_width_adjustment")), lw); gtk_adjustment_set_value ( GTK_ADJUSTMENT(gtk_builder_get_object(builder, "gps_alpha_adjustment")), a); gtk_adjustment_set_value ( GTK_ADJUSTMENT(gtk_builder_get_object(builder, "star_xalign_adjustment")), 0.5); gtk_adjustment_set_value ( GTK_ADJUSTMENT(gtk_builder_get_object(builder, "star_yalign_adjustment")), 0.5); #if GTK_CHECK_VERSION(3,4,0) gtk_color_chooser_set_rgba ( GTK_COLOR_CHOOSER(gtk_builder_get_object(builder, "gps_colorbutton")), &c); #else gtk_color_button_set_rgba ( GTK_COLOR_BUTTON(gtk_builder_get_object(builder, "gps_colorbutton")), &c); #endif //Connect to signals g_signal_connect ( gtk_builder_get_object(builder, "gps_colorbutton"), "color-set", G_CALLBACK (on_gps_color_changed), (gpointer) gpstrack); g_signal_connect ( gtk_builder_get_object(builder, "zoom_in_button"), "clicked", G_CALLBACK (on_zoom_in_clicked_event), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "zoom_out_button"), "clicked", G_CALLBACK (on_zoom_out_clicked_event), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "home_button"), "clicked", G_CALLBACK (on_home_clicked_event), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "cache_button"), "clicked", G_CALLBACK (on_cache_clicked_event), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "gps_alpha_adjustment"), "value-changed", G_CALLBACK (on_gps_alpha_changed), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "gps_width_adjustment"), "value-changed", G_CALLBACK (on_gps_width_changed), (gpointer) map); g_signal_connect ( gtk_builder_get_object(builder, "star_xalign_adjustment"), "value-changed", G_CALLBACK (on_star_align_changed), (gpointer) "x-align"); g_signal_connect ( gtk_builder_get_object(builder, "star_yalign_adjustment"), "value-changed", G_CALLBACK (on_star_align_changed), (gpointer) "y-align"); g_signal_connect (G_OBJECT (map), "button-press-event", G_CALLBACK (on_button_press_event), NULL); g_signal_connect (G_OBJECT (map), "changed", G_CALLBACK (on_map_changed_event), (gpointer) gtk_builder_get_object(builder, "text_entry")); g_signal_connect (G_OBJECT (map), "notify::tiles-queued", G_CALLBACK (on_tiles_queued_changed), (gpointer) gtk_builder_get_object(builder, "cache_label")); widget = GTK_WIDGET(gtk_builder_get_object(builder, "window1")); g_signal_connect (widget, "destroy", G_CALLBACK (on_close), (gpointer) map); //Setup accelerators. ag = gtk_accel_group_new(); gtk_accel_group_connect(ag, GDK_KEY_w, GDK_CONTROL_MASK, GTK_ACCEL_MASK, g_cclosure_new(gtk_main_quit, NULL, NULL)); gtk_accel_group_connect(ag, GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_MASK, g_cclosure_new(gtk_main_quit, NULL, NULL)); gtk_window_add_accel_group(GTK_WINDOW(widget), ag); gtk_widget_show_all (widget); g_log_set_handler ("OsmGpsMap", G_LOG_LEVEL_MASK, g_log_default_handler, NULL); gtk_main (); return 0; } osm-gps-map-1.2.2/examples/mapviewer.js000077500000000000000000000012541526276210300200400ustar00rootroot00000000000000#!/usr/bin/seed // You probably need to tell GObject introspection where to find the bindings // export LD_LIBRARY_PATH=../src/.libs/ // export GI_TYPELIB_PATH=../src/ const Gtk = imports.gi.Gtk; const Osm = imports.gi.OsmGpsMap; Gtk.init(0, null); var win = new Gtk.Window({ type: Gtk.WindowType.TOPLEVEL }); win.set_border_width(10); win.set_default_size(400,400); // ARRRGGGHHHHH GNOME if (0) // GJS makes me do this win.connect("delete-event", Gtk.main_quit); else // Seed makes me do this win.signal.delete_event.connect(Gtk.main_quit); var map = new Osm.OsmGpsMap() var osd = new Osm.Osd() map.layer_add(osd) win.add(map); win.show_all(); Gtk.main(); osm-gps-map-1.2.2/examples/mapviewer.py000077500000000000000000000316721526276210300200630ustar00rootroot00000000000000#!/usr/bin/env python3 """ Copyright (C) Hadley Rich 2008 based on main.c - with thanks to John Stowers This is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . """ import math import random import cairo import gi gi.require_version("Gdk", "3.0") gi.require_version("Gtk", "3.0") gi.require_version("OsmGpsMap", "1.0") from gi.repository import ( Gdk, GdkPixbuf, GLib, GObject, Gtk, OsmGpsMap as osmgpsmap, ) # noqa print(f"using {osmgpsmap} (version {osmgpsmap._version})") assert osmgpsmap._version == "1.0" # Timaru. DrawLayer paints a house here; click Home or start here to see it. HOME_LAT = -44.39 HOME_LON = 171.25 HOME_ZOOM = 12 class DummyMapNoGpsPoint(osmgpsmap.Map): def do_draw_gps_point(self, cr): pass GObject.type_register(DummyMapNoGpsPoint) class DrawLayer(GObject.GObject, osmgpsmap.MapLayer): """Cairo overlay. The map passes its cairo_t; do not create a surface. For paths use track_add, for markers image_add. This class is the live-cairo case: draw in widget pixels after convert_geographic_to_screen. """ def __init__(self): GObject.GObject.__init__(self) def do_draw(self, gpsmap, cr): pt = osmgpsmap.MapPoint.new_degrees(HOME_LAT, HOME_LON) x, y = gpsmap.convert_geographic_to_screen(pt) cr.set_source_rgba(1.0, 0.0, 0.0, 0.6) cr.move_to(x, y) cr.line_to(x + 12, y + 10) cr.line_to(x + 12, y + 24) cr.line_to(x - 12, y + 24) cr.line_to(x - 12, y + 10) cr.close_path() cr.fill() def do_render(self, gpsmap): # OSD caches bitmaps here. Geo overlays paint in do_draw instead. pass def do_busy(self): return False def do_button_press(self, gpsmap, event): return False GObject.type_register(DrawLayer) class UI(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, type=Gtk.WindowType.TOPLEVEL) self.set_default_size(500, 500) self.connect("destroy", lambda x: Gtk.main_quit()) self.set_title("OpenStreetMap GPS Mapper") self.vbox = Gtk.VBox(homogeneous=False, spacing=0) self.add(self.vbox) if 0: self.osm = DummyMapNoGpsPoint() else: self.osm = osmgpsmap.Map(user_agent="mapviewer.py") self.osm.set_property("map-source", osmgpsmap.MapSource_t.OPENSTREETMAP) self.use_poi_png = True self._wire_map(self.osm) self.latlon_entry = Gtk.Entry() zoom_in_button = Gtk.Button.new_from_icon_name("zoom-in", Gtk.IconSize.BUTTON) zoom_in_button.connect("clicked", self.zoom_in_clicked) zoom_out_button = Gtk.Button.new_from_icon_name("zoom-out", Gtk.IconSize.BUTTON) zoom_out_button.connect("clicked", self.zoom_out_clicked) home_button = Gtk.Button.new_from_icon_name("go-home", Gtk.IconSize.BUTTON) home_button.connect("clicked", self.home_clicked) cache_button = Gtk.Button(label="Cache") cache_button.connect("clicked", self.cache_clicked) self.vbox.pack_start(self.osm, True, True, 0) hbox = Gtk.HBox(homogeneous=False, spacing=0) hbox.pack_start(zoom_in_button, False, True, 0) hbox.pack_start(zoom_out_button, False, True, 0) hbox.pack_start(home_button, False, True, 0) hbox.pack_start(cache_button, False, True, 0) # add ability to test custom map URIs ex = Gtk.Expander(label="Map Repository URI") ex.props.use_markup = True vb = Gtk.VBox() self.repouri_entry = Gtk.Entry() self.repouri_entry.set_text(self.osm.props.repo_uri) self.image_format_entry = Gtk.Entry() self.image_format_entry.set_text(self.osm.props.image_format) lbl = Gtk.Label( label="""Enter an repository URL to fetch map tiles \ from in the box below. Special metacharacters may be included in this url Metacharacters: \t#X\tMax X location \t#Y\tMax Y location \t#Z\tMap zoom (0 = min zoom, fully zoomed out) \t#S\tInverse zoom (max-zoom - #Z) \t#Q\tQuadtree encoded tile (qrts) \t#W\tQuadtree encoded tile (1234) \t#U\tEncoding not implemented \t#R\tRandom integer, 0-4""" ) lbl.props.xalign = 0 lbl.props.use_markup = True lbl.props.wrap = True ex.add(vb) vb.pack_start(lbl, False, True, 0) hb = Gtk.HBox() hb.pack_start(Gtk.Label(label="URI: "), False, True, 0) hb.pack_start(self.repouri_entry, True, True, 0) vb.pack_start(hb, False, True, 0) hb = Gtk.HBox() hb.pack_start(Gtk.Label(label="Image Format: "), False, True, 0) hb.pack_start(self.image_format_entry, True, True, 0) vb.pack_start(hb, False, True, 0) gobtn = Gtk.Button(label="Load Map URI") gobtn.connect("clicked", self.load_map_clicked) vb.pack_start(gobtn, False, True, 0) self.show_tooltips = False cb = Gtk.CheckButton(label="Show Location in Tooltips") cb.props.active = self.show_tooltips cb.connect("toggled", self.on_show_tooltips_toggled) self.vbox.pack_end(cb, False, True, 0) cb = Gtk.CheckButton(label="Use poi.png for markers") cb.props.active = self.use_poi_png cb.connect("toggled", self.on_use_poi_png_toggled) self.vbox.pack_end(cb, False, True, 0) cb = Gtk.CheckButton(label="Disable Cache") cb.props.active = False cb.connect("toggled", self.disable_cache_toggled) self.vbox.pack_end(cb, False, True, 0) self.vbox.pack_end(ex, False, True, 0) self.vbox.pack_end(self.latlon_entry, False, True, 0) self.vbox.pack_end(hbox, False, True, 0) GLib.timeout_add(500, self.print_tiles) def _wire_map(self, osm): self.osm = osm osm.layer_add( osmgpsmap.MapOsd(show_dpad=True, show_zoom=True, show_crosshair=True) ) osm.layer_add(DrawLayer()) osm.set_center_and_zoom(HOME_LAT, HOME_LON, HOME_ZOOM) # Stay put on gps_add so the blue blob is not under the OSD crosshair. osm.props.auto_center = False self.click_track = osmgpsmap.MapTrack() osm.track_add(self.click_track) self.last_image = None osm.connect("button_press_event", self.on_button_press) osm.connect("changed", self.on_map_change) osm.set_keyboard_shortcut( osmgpsmap.MapKey_t.FULLSCREEN, Gdk.keyval_from_name("F11") ) osm.set_keyboard_shortcut( osmgpsmap.MapKey_t.UP, Gdk.keyval_from_name("Up") ) osm.set_keyboard_shortcut( osmgpsmap.MapKey_t.DOWN, Gdk.keyval_from_name("Down") ) osm.set_keyboard_shortcut( osmgpsmap.MapKey_t.LEFT, Gdk.keyval_from_name("Left") ) osm.set_keyboard_shortcut( osmgpsmap.MapKey_t.RIGHT, Gdk.keyval_from_name("Right") ) osm.props.has_tooltip = True osm.connect("query-tooltip", self.on_query_tooltip) def disable_cache_toggled(self, btn): if btn.props.active: self.osm.props.tile_cache = osmgpsmap.MAP_CACHE_DISABLED else: self.osm.props.tile_cache = osmgpsmap.MAP_CACHE_AUTO def on_show_tooltips_toggled(self, btn): self.show_tooltips = btn.props.active def on_use_poi_png_toggled(self, btn): self.use_poi_png = btn.props.active def load_map_clicked(self, button): uri = self.repouri_entry.get_text() format = self.image_format_entry.get_text() if uri and format: if self.osm: self.vbox.remove(self.osm) try: osm = osmgpsmap.Map( repo_uri=uri, image_format=format, user_agent="mapviewer.py" ) except Exception as e: print("ERROR:", e) osm = osmgpsmap.Map(user_agent="mapviewer.py") self._wire_map(osm) self.vbox.pack_start(self.osm, True, True, 0) self.osm.show() def print_tiles(self): if self.osm.props.tiles_queued != 0: print(self.osm.props.tiles_queued, "tiles queued") return True def zoom_in_clicked(self, button): self.osm.set_zoom(self.osm.props.zoom + 1) def zoom_out_clicked(self, button): self.osm.set_zoom(self.osm.props.zoom - 1) def home_clicked(self, button): self.osm.set_center_and_zoom(HOME_LAT, HOME_LON, HOME_ZOOM) def on_query_tooltip(self, widget, x, y, keyboard_tip, tooltip, data=None): if keyboard_tip: return False if self.show_tooltips: # GI treats the MapPoint as an out-arg, so it is returned. p = self.osm.convert_screen_to_geographic(x, y) lat, lon = p.get_degrees() tooltip.set_markup(f"{lat:+.4f}, {lon:+.4f}") return True return False def cache_clicked(self, button): bbox = self.osm.get_bbox() self.osm.download_maps( *bbox, zoom_start=self.osm.props.zoom, zoom_end=self.osm.props.max_zoom ) def on_map_change(self, osm): self.latlon_entry.set_text( f"Map Centre: latitude {self.osm.props.latitude} " f"longitude {self.osm.props.longitude}" ) def on_button_press(self, osm, event): # Double-click: left GPS, middle image_add, right track_add. # Triple-click: middle remove last image, right clear the track. state = event.get_state() lat, lon = self.osm.get_event_location(event).get_degrees() # 2BUTTON_PRESS often has BUTTONn_MASK set; ignore those, keep Shift/Ctrl. mods = state & ( Gdk.ModifierType.SHIFT_MASK | Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK ) left = event.button == 1 and mods == 0 middle = event.button == 2 or ( event.button == 1 and state & Gdk.ModifierType.SHIFT_MASK ) right = event.button == 3 or ( event.button == 1 and state & Gdk.ModifierType.CONTROL_MASK ) # work around binding bug with invalid variable name GDK_2BUTTON_PRESS = getattr(Gdk.EventType, "2BUTTON_PRESS") GDK_3BUTTON_PRESS = getattr(Gdk.EventType, "3BUTTON_PRESS") if event.type == GDK_3BUTTON_PRESS: if middle: if self.last_image is not None: self.osm.image_remove(self.last_image) self.last_image = None if right: self.osm.track_remove(self.click_track) self.click_track = osmgpsmap.MapTrack() self.osm.track_add(self.click_track) elif event.type == GDK_2BUTTON_PRESS: if left: self.osm.gps_add(lat, lon, heading=random.random() * 360) if middle: self.last_image = self.osm.image_add( lat, lon, self._marker_pixbuf() ) if right: pt = osmgpsmap.MapPoint.new_degrees(lat, lon) self.click_track.add_point(pt) def _marker_pixbuf(self): if self.use_poi_png: try: return GdkPixbuf.Pixbuf.new_from_file_at_size("poi.png", 24, 24) except GLib.Error as err: print("poi.png:", err) return self._star_pixbuf() def _star_pixbuf(self, size=24): # Programmatic image: cairo star -> pixbuf -> image_add. # Live cairo on the map is DrawLayer, not this. surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, size, size) cr = cairo.Context(surface) cx = cy = size / 2.0 outer, inner = size / 2.0 - 1.0, size / 5.0 for i in range(10): r = outer if i % 2 == 0 else inner ang = -math.pi / 2.0 + i * math.pi / 5.0 x = cx + r * math.cos(ang) y = cy + r * math.sin(ang) if i == 0: cr.move_to(x, y) else: cr.line_to(x, y) cr.close_path() cr.set_source_rgb(1.0, 0.85, 0.0) cr.fill_preserve() cr.set_source_rgb(0.75, 0.45, 0.0) cr.set_line_width(1) cr.stroke() return Gdk.pixbuf_get_from_surface(surface, 0, 0, size, size) if __name__ == "__main__": u = UI() u.show_all() Gtk.main() osm-gps-map-1.2.2/examples/mapviewer.ui000066400000000000000000000544461526276210300200510ustar00rootroot00000000000000 1 0.10000000000000001 0.10000000000000001 10 0.5 0.5 False 400 400 True False 4 4 4 4 True False 4 True False True True 0 True False True gtk-zoom-in True True True False True True True 0 gtk-zoom-out True True True False True True True 1 gtk-home True True True False True True True 2 Cache True True True False True True 3 False False 1 True False 4 True True • True True 0 True False 1 0 5 False True 1 False False 2 True True True False 4 True False True False 4 True False 0 Color False True 0 True True True False #000000000000 True True 1 False False 0 True False 4 True False 0 Alpha False True 0 True True gps_alpha_adjustment False 0 False True True 1 False False 1 True False 4 True False 0 Width False True 0 True True gps_width_adjustment False 0 False True True 1 False False 2 True False GPS Track Appearance False False 3 True True True False 4 True False True False 4 True False 0 X Offset False True 0 True True star_xalign_adjustment False 0 False True True 1 False False 0 True False 4 True False 0 Y Offset False True 0 True True star_yalign_adjustment False 0 False True True 1 False False 1 True False Star Image Appearance False False 4 1 0.5 0.10000000000000001 0.10000000000000001 1 0.5 0.10000000000000001 0.10000000000000001 osm-gps-map-1.2.2/examples/poi.png000066400000000000000000000021051526276210300167710ustar00rootroot00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs¸¸¤ûfKtEXtSoftwarewww.inkscape.org›î<ÂIDATH‰­–ïO[UÇ¿ç¶÷¶Ú®‡Òûc°1ÂXgb|á ›Æ 'èb¢{�s‰Ä½€ÁÔ?Àh‹ ‹1QÇ–€1J²Å-Æ€¾×à�%5ƒ­2Xec8`´¥÷Þ¶÷<¾¸½])�ënòä>99çó=Ï�sï¡X;7,6?Ì|"‚€"Ÿþ>Iðz½Ãç†Å–b×(^ÀçŽÖïìÝUQÙpzÓúû$æñèÅÇÐÔth×™!éঠøüìõ׋;VëNæv{?ÚT·gÿ)QÜ@  iϳ�ŸJ6Eàû‹%í.WKƒ—A¤Àjõ 5®'>,FÀü  .ÏÓïI’ D2Œ) RÑÜÜ3|ÖÒ©Ètym sÝ=I*´žúû$Ë£ht:YÀé¬ñÛ·v”–VyDó¶j›½¶Êl¶‚H €s= ΤÓw 'îðhìÞr2›O¥¢³r":»–ˆÏ®Å‰®b’�}W2²ï©‡m¶@‰(VCJ³°\#RA$ƒHç*8—sL�¦ÉYK§ã¸}kvab"Þašù[û+PÚ|¾vc–<°š}3–?–+®dÄõw8üO¬·gåòè×4aš¿EK--Ǫ­ý³Õë Ú£u Æ0føjLÉDcø2¦§æV{O-�ýö;NÑF¤×¦¢‚ùê~l}©Û-bvÇ0à hš’—},š¹×Õµüm(DƒDZ×E‹‹t­ÌÁžK¥>?üÊñ'u‘û;gÌ(°š¡œ�&º±râÝ¥o¦¦1@DSÛty…nØíl254~äÈA0g`ÉÌîÕlèÅÖýHä¶ÜùÎÝ‘ëa Ñõ\憃¶ºJ‘ n¾‹^å”óD¶cróo´«É¤ w—ðe>¼ ë½[¶ZÎ×ç:ß×£H ¼œ[^{ÕÔ\ˆUPàómç24í>Ðès#M3j’FeÛ[ˆUðS!Še»‰´ NOU D<'=}eeÌW´€d±ôÊY‘ùù›ÊØØÜôÂBj¥­ÍÖX__â R3Ô/ YÜš– ãßÅHòÒ¥™ðЙØÏ‘~ðëùóËϼ}ÌÜu¨Õ´ÛëevΧåŒ1+Å×ÁòÒŸ&>µ©«{ӟدÕÕá mœ¹ólu:ñfÏIÓ/ãblrRL?PØ—ÏÛ 0:"¶ŸýÊz%d£ŽØþ·Žêjt~ð¾é�·:„“èé6K^à~˜ë €J ùãÿ--"v ?ÈÍIEND®B`‚osm-gps-map-1.2.2/examples/polygon.c000066400000000000000000000021431526276210300173310ustar00rootroot00000000000000#include #include "osm-gps-map.h" int main (int argc, char *argv[]) { OsmGpsMap *map; OsmGpsMapPolygon* poly; GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Window"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); map = g_object_new (OSM_TYPE_GPS_MAP, NULL); gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(map)); poly = osm_gps_map_polygon_new(); OsmGpsMapTrack* polytrack = osm_gps_map_track_new(); OsmGpsMapPoint* p1, *p2, *p3; p1 = osm_gps_map_point_new_degrees(72.0, -28.0); p2 = osm_gps_map_point_new_degrees(61.0, -43.0); p3 = osm_gps_map_point_new_degrees(61.0, -11.0); osm_gps_map_track_add_point(polytrack, p1); osm_gps_map_track_add_point(polytrack, p2); osm_gps_map_track_add_point(polytrack, p3); g_object_set(poly, "track", polytrack, NULL); g_object_set(poly, "editable", TRUE, NULL); osm_gps_map_polygon_add(map, poly); gtk_widget_show (GTK_WIDGET(map)); gtk_widget_show (window); gtk_main (); return 0; } osm-gps-map-1.2.2/m4/000077500000000000000000000000001526276210300142005ustar00rootroot00000000000000osm-gps-map-1.2.2/m4/.gitignore000066400000000000000000000000051526276210300161630ustar00rootroot00000000000000*.m4 osm-gps-map-1.2.2/osmgpsmap-1.0.pc.in000066400000000000000000000004651526276210300171200ustar00rootroot00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE_NAME@ Description: Moving map widget using openstreet map data Version: @PACKAGE_VERSION@ Requires: gtk+-3.0 Requires.private: libsoup-3.0 Libs: -L${libdir} -losmgpsmap-1.0 Cflags: -I${includedir}/osmgpsmap-1.0 osm-gps-map-1.2.2/osmgpsmap.xml000066400000000000000000000010631526276210300164100ustar00rootroot00000000000000 osm-gps-map-1.2.2/scripts/000077500000000000000000000000001526276210300153475ustar00rootroot00000000000000osm-gps-map-1.2.2/scripts/releases-data.py000077500000000000000000000130721526276210300204410ustar00rootroot00000000000000#!/usr/bin/env python3 """Write website/_data/releases.json from the GitHub Releases API. Download list is Releases only. Tag-only tags are omitted on purpose. News bullets come from the release body (`## Changes in …`), not from re-parsing NEWS in CI. """ from __future__ import annotations import argparse import json import os import re import sys import urllib.error import urllib.request from pathlib import Path CHANGES_HEAD = re.compile(r"^#{1,2} Changes in\b") BULLET = re.compile(r"^[\*\-] (.+)$") def _api(url: str, token: str | None) -> object: headers = { "Accept": "application/vnd.github+json", "User-Agent": "osm-gps-map-pages", } if token: headers["Authorization"] = f"Bearer {token}" req = urllib.request.Request(url, headers=headers) with urllib.request.urlopen(req, timeout=30) as resp: return json.load(resp) def tar_asset(rel: dict) -> str | None: for asset in rel.get("assets") or []: name = asset.get("name") or "" url = asset.get("browser_download_url") or "" if name.endswith(".tar.gz") and url: return str(url) return None def archive_url(repo: str, tag: str, asset: str | None) -> str: if asset: return asset return f"https://github.com/{repo}/archive/refs/tags/{tag}.tar.gz" def changes_from_body(body: str) -> list[str]: items: list[str] = [] in_changes = False for line in (body or "").splitlines(): if CHANGES_HEAD.match(line.strip()): in_changes = True continue if in_changes and line.startswith("## "): break if not in_changes: continue b = BULLET.match(line.strip()) if b: items.append(b.group(1).strip()) return items def fetch_releases(repo: str, token: str | None) -> list[dict]: out: list[dict] = [] page = 1 while True: data = _api( f"https://api.github.com/repos/{repo}/releases?per_page=100&page={page}", token, ) if not isinstance(data, list) or not data: break for item in data: if item.get("draft"): continue tag = item.get("tag_name") if not tag: continue body = item.get("body") or "" out.append( { "tag": str(tag), "date": (item.get("published_at") or "")[:10], "prerelease": bool(item.get("prerelease")), "html_url": str( item.get("html_url") or f"https://github.com/{repo}/releases/tag/{tag}" ), "archive_url": archive_url(repo, str(tag), tar_asset(item)), "changes": changes_from_body(body), } ) if len(data) < 100: break page += 1 return out def payload(repo: str, rels: list[dict]) -> dict: published = [r for r in rels if not r["prerelease"]] latest = published[0] if published else (rels[0] if rels else None) return { "repo": repo, "clone_url": f"https://github.com/{repo}.git", "master_tar": f"https://github.com/{repo}/archive/refs/heads/master.tar.gz", "master_zip": f"https://github.com/{repo}/archive/refs/heads/master.zip", "latest": latest, "archives": rels, } def main(argv: list[str] | None = None) -> int: p = argparse.ArgumentParser() p.add_argument("--repo", required=True) p.add_argument("--out", type=Path, required=True) p.add_argument("--token", default=os.environ.get("GITHUB_TOKEN", "")) args = p.parse_args(argv) try: rels = fetch_releases(args.repo, args.token or None) except urllib.error.HTTPError as exc: raise SystemExit(f"releases API failed: {exc}") from exc args.out.parent.mkdir(parents=True, exist_ok=True) args.out.write_text( json.dumps(payload(args.repo, rels), indent=2) + "\n", encoding="utf-8", ) return 0 SAMPLE_BODY = """# osm-gps-map lab-1 ## Changes in lab-1 - jekyll: boilerplate landing page - ci: Actions deploys Pages ## Source tarball - File: `osm-gps-map-lab-1.tar.gz` """ SAMPLE_STAR_BODY = """# osm-gps-map 1.2.1 ## Changes in 1.2.1 * Replace deprecated G_TYPE_INSTANCE_GET_PRIVATE * Add python unit tests (Patrick Salecker) """ def _self_check() -> None: assert changes_from_body(SAMPLE_BODY) == [ "jekyll: boilerplate landing page", "ci: Actions deploys Pages", ] assert changes_from_body(SAMPLE_STAR_BODY) == [ "Replace deprecated G_TYPE_INSTANCE_GET_PRIVATE", "Add python unit tests (Patrick Salecker)", ] assert changes_from_body("no heading\n- nope") == [] data = payload( "nzjrs/osm-gps-map", [ { "tag": "lab-1", "date": "2026-09-10", "prerelease": False, "html_url": "https://github.com/nzjrs/osm-gps-map/releases/tag/lab-1", "archive_url": archive_url("nzjrs/osm-gps-map", "lab-1", None), "changes": ["jekyll: boilerplate landing page"], } ], ) assert data["latest"]["tag"] == "lab-1" assert len(data["archives"]) == 1 empty = payload("nzjrs/osm-gps-map", []) assert empty["latest"] is None assert empty["archives"] == [] print("releases-data self-check ok") if __name__ == "__main__": if len(sys.argv) > 1 and sys.argv[1] == "--self-check": _self_check() else: raise SystemExit(main()) osm-gps-map-1.2.2/src/000077500000000000000000000000001526276210300144475ustar00rootroot00000000000000osm-gps-map-1.2.2/src/.gitignore000066400000000000000000000000501526276210300164320ustar00rootroot00000000000000OsmGpsMap-1.0.gir OsmGpsMap-1.0.typelib osm-gps-map-1.2.2/src/Makefile.am000066400000000000000000000052241526276210300165060ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in lib_LTLIBRARIES = libosmgpsmap-1.0.la OSMGPSMAP_CFLAGS = \ $(GLIB_CFLAGS) \ $(GTK_CFLAGS) \ $(CAIRO_CFLAGS) \ $(SOUP30_CFLAGS) OSMGPSMAP_LIBS = \ $(GLIB_LIBS) \ $(GTK_LIBS) \ $(CAIRO_LIBS) \ $(SOUP30_LIBS) ## Shared library libosmgpsmap_1_0_la_CFLAGS = \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) \ $(OSMGPSMAP_CFLAGS) \ -DG_LOG_DOMAIN=\"OsmGpsMap\" if OS_WIN32 no_undefined = -no-undefined endif libosmgpsmap_1_0_la_LDFLAGS = \ -version-info $(LT_VERSION_INFO) \ $(no_undefined) libosmgpsmap_1_0_la_LIBADD = \ $(OSMGPSMAP_LIBS) \ -lm sources_private_h = \ converter.h \ osd-utils.h \ private.h sources_public_h = \ osm-gps-map.h \ osm-gps-map-osd.h \ osm-gps-map-layer.h \ osm-gps-map-track.h \ osm-gps-map-polygon.h \ osm-gps-map-point.h \ osm-gps-map-image.h \ osm-gps-map-source.h \ osm-gps-map-widget.h \ osm-gps-map-compat.h sources_c = \ converter.c \ osd-utils.c \ osm-gps-map-osd.c \ osm-gps-map-layer.c \ osm-gps-map-track.c \ osm-gps-map-polygon.c \ osm-gps-map-point.c \ osm-gps-map-image.c \ osm-gps-map-source.c \ osm-gps-map-widget.c \ osm-gps-map-compat.c libosmgpsmap_1_0_la_SOURCES = \ $(sources_public_h) \ $(sources_private_h) \ $(sources_c) libosmgpsmapincdir = $(includedir)/osmgpsmap-1.0 libosmgpsmapinc_HEADERS = $(sources_public_h) ## Misc CLEANFILES = ## GObject Introspection Support -include $(INTROSPECTION_MAKEFILE) INTROSPECTION_GIRS = INTROSPECTION_SCANNER_ARGS = $(INTROSPECTION_FLAGS) --add-include-path=$(srcdir) --add-include-path=$(builddir) --warn-all --warn-error INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) --includedir=$(builddir) if HAVE_INTROSPECTION introspection_sources = $(sources_c) $(sources_public_h) OsmGpsMap-1.0.gir: libosmgpsmap-1.0.la OsmGpsMap_1_0_gir_INCLUDES = GObject-2.0 Gtk-3.0 OsmGpsMap_1_0_gir_CFLAGS = $(OSMGPSMAP_CFLAGS) -I$(srcdir) -I$(builddir) OsmGpsMap_1_0_gir_LIBS = libosmgpsmap-1.0.la OsmGpsMap_1_0_gir_FILES = $(introspection_sources) OsmGpsMap_1_0_gir_SCANNERFLAGS = --identifier-prefix=OsmGps --c-include "osm-gps-map.h" INTROSPECTION_GIRS += OsmGpsMap-1.0.gir girdir = $(datadir)/gir-1.0 gir_DATA = $(INTROSPECTION_GIRS) typelibdir = $(libdir)/girepository-1.0 typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) CLEANFILES += $(gir_DATA) $(typelib_DATA) endif osm-gps-map-1.2.2/src/OsmGpsMap.vapi000066400000000000000000000265321526276210300172060ustar00rootroot00000000000000/* OsmGpsMap.vapi generated by vapigen, do not modify. */ [CCode (cprefix = "OsmGps", gir_namespace = "OsmGpsMap", gir_version = "1.0", lower_case_cprefix = "osm_gps_")] namespace OsmGps { [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_get_type ()")] public class Map : Gtk.DrawingArea, Atk.Implementor, Gtk.Buildable { [CCode (has_construct_function = false, type = "GtkWidget*")] public Map (); [Version (since = "0.7.0")] public void convert_geographic_to_screen (OsmGps.MapPoint pt, out int pixel_x, out int pixel_y); [Version (since = "0.7.0")] public void convert_screen_to_geographic (int pixel_x, int pixel_y, OsmGps.MapPoint pt); [Version (since = "0.7.0")] public void download_cancel_all (); public void download_maps (OsmGps.MapPoint pt1, OsmGps.MapPoint pt2, int zoom_start, int zoom_end); [NoWrapper] public virtual void draw_gps_point (Cairo.Context cr); public void get_bbox (OsmGps.MapPoint pt1, OsmGps.MapPoint pt2); public static string get_default_cache_directory (); [Version (since = "0.7.0")] public OsmGps.MapPoint get_event_location (Gdk.EventButton event); public float get_scale (); [Version (since = "0.7.0")] public void gps_add (float latitude, float longitude, float heading); [Version (since = "0.7.0")] public void gps_clear (); [Version (since = "0.7.0")] public unowned OsmGps.MapTrack gps_get_track (); [Version (since = "0.7.0")] public OsmGps.MapImage image_add (float latitude, float longitude, Gdk.Pixbuf image); [Version (since = "0.7.0")] public OsmGps.MapImage image_add_with_alignment (float latitude, float longitude, Gdk.Pixbuf image, float xalign, float yalign); [Version (since = "0.7.4")] public OsmGps.MapImage image_add_with_alignment_z (float latitude, float longitude, Gdk.Pixbuf image, float xalign, float yalign, int zorder); [Version (since = "0.7.4")] public OsmGps.MapImage image_add_z (float latitude, float longitude, Gdk.Pixbuf image, int zorder); [Version (since = "0.7.0")] public bool image_remove (OsmGps.MapImage image); [Version (since = "0.7.0")] public void image_remove_all (); [Version (since = "0.7.0")] public void layer_add (OsmGps.MapLayer layer); [Version (since = "0.7.0")] public bool layer_remove (OsmGps.MapLayer layer); [Version (since = "0.7.0")] public void layer_remove_all (); public bool map_redraw (); public void map_redraw_idle (); public void polygon_add (OsmGps.MapPolygon poly); public bool polygon_remove (OsmGps.MapPolygon poly); public void polygon_remove_all (); public void scroll (int dx, int dy); public void set_center (float latitude, float longitude); [Version (since = "0.7.0")] public void set_center_and_zoom (float latitude, float longitude, int zoom); public void set_keyboard_shortcut (OsmGps.MapKey_t key, uint keyval); public int set_zoom (int zoom); public void set_zoom_offset (int zoom_offset); public static unowned string source_get_copyright (OsmGps.MapSource_t source); public static unowned string source_get_friendly_name (OsmGps.MapSource_t source); public static unowned string source_get_image_format (OsmGps.MapSource_t source); public static int source_get_max_zoom (OsmGps.MapSource_t source); public static int source_get_min_zoom (OsmGps.MapSource_t source); public static unowned string source_get_repo_uri (OsmGps.MapSource_t source); public static bool source_is_valid (OsmGps.MapSource_t source); [Version (since = "0.7.0")] public void track_add (OsmGps.MapTrack track); [Version (since = "0.7.0")] public bool track_remove (OsmGps.MapTrack track); [Version (since = "0.7.0")] public void track_remove_all (); public void zoom_fit_bbox (float latitude1, float latitude2, float longitude1, float longitude2); public int zoom_in (); public int zoom_out (); [NoAccessorMethod] public bool auto_center { get; set construct; } [NoAccessorMethod] public float auto_center_threshold { get; set construct; } [NoAccessorMethod] public bool auto_download { get; set construct; } [NoAccessorMethod] public int drag_limit { get; construct; } [NoAccessorMethod] public int gps_track_highlight_radius { get; set construct; } [NoAccessorMethod] public int gps_track_point_radius { get; set construct; } [NoAccessorMethod] public float gps_track_width { get; set construct; } [NoAccessorMethod] public string image_format { owned get; construct; } [NoAccessorMethod] public float latitude { get; } [NoAccessorMethod] public float longitude { get; } [NoAccessorMethod] public int map_source { get; set construct; } [NoAccessorMethod] public int map_x { get; construct; } [NoAccessorMethod] public int map_y { get; construct; } [NoAccessorMethod] public int max_zoom { get; construct; } [NoAccessorMethod] public int min_zoom { get; construct; } [NoAccessorMethod] public string proxy_uri { owned get; construct; } [NoAccessorMethod] public bool record_trip_history { get; set construct; } [NoAccessorMethod] public string repo_uri { owned get; construct; } [NoAccessorMethod] public bool show_gps_point { get; set construct; } [NoAccessorMethod] public bool show_trip_history { get; set construct; } [NoAccessorMethod] public string tile_cache { owned get; set construct; } [NoAccessorMethod] public string tile_cache_base { owned get; construct; } [NoAccessorMethod] public int tile_zoom_offset { get; construct; } [NoAccessorMethod] public int tiles_queued { get; } [NoAccessorMethod] public string user_agent { owned get; set construct; } [NoAccessorMethod] public int zoom { get; construct; } public signal void changed (); } [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_image_get_type ()")] public class MapImage : GLib.Object { [CCode (has_construct_function = false)] public MapImage (); public void draw (Cairo.Context cr, Gdk.Rectangle rect); public unowned OsmGps.MapPoint get_point (); public float get_rotation (); public int get_zorder (); public void set_rotation (float rot); [NoAccessorMethod] public Gdk.Pixbuf pixbuf { owned get; set construct; } [NoAccessorMethod] public OsmGps.MapPoint point { owned get; set construct; } public float rotation { get; set construct; } [NoAccessorMethod] public float x_align { get; set construct; } [NoAccessorMethod] public float y_align { get; set construct; } [NoAccessorMethod] public int z_order { get; set construct; } } [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_osd_get_type ()")] public class MapOsd : GLib.Object, OsmGps.MapLayer { [CCode (has_construct_function = false)] public MapOsd (); [NoAccessorMethod] public uint dpad_radius { get; set construct; } [NoAccessorMethod] public int osd_x { get; set construct; } [NoAccessorMethod] public int osd_y { get; set construct; } [NoAccessorMethod] public bool show_coordinates { get; set construct; } [NoAccessorMethod] public bool show_copyright { get; set construct; } [NoAccessorMethod] public bool show_crosshair { get; set construct; } [NoAccessorMethod] public bool show_dpad { get; set construct; } [NoAccessorMethod] public bool show_gps_in_dpad { get; set construct; } [NoAccessorMethod] public bool show_gps_in_zoom { get; set construct; } [NoAccessorMethod] public bool show_scale { get; set construct; } [NoAccessorMethod] public bool show_zoom { get; set construct; } } [CCode (cheader_filename = "osm-gps-map.h", copy_function = "g_boxed_copy", free_function = "g_boxed_free", type_id = "osm_gps_map_point_get_type ()")] [Compact] public class MapPoint { public float rlat; public float rlon; [Version (since = "0.7.2")] public OsmGps.MapPoint copy (); [CCode (has_construct_function = false)] public MapPoint.degrees (float lat, float lon); [Version (since = "0.7.2")] public void free (); public void get_degrees (out float lat, out float lon); public void get_radians (float rlat, float rlon); [CCode (has_construct_function = false)] public MapPoint.radians (float rlat, float rlon); public void set_degrees (float lat, float lon); public void set_radians (float rlat, float rlon); } [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_polygon_get_type ()")] public class MapPolygon : GLib.Object { [CCode (has_construct_function = false)] public MapPolygon (); public unowned OsmGps.MapTrack get_track (); [NoAccessorMethod] public bool editable { get; set construct; } [NoAccessorMethod] public float shade_alpha { get; set construct; } [NoAccessorMethod] public bool shaded { get; set construct; } [NoAccessorMethod] public void* track { get; set construct; } [NoAccessorMethod] public bool visible { get; set construct; } [NoAccessorMethod] public bool breakable { get; set construct; } } [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_track_get_type ()")] public class MapTrack : GLib.Object { [CCode (has_construct_function = false)] public MapTrack (); [Version (since = "0.7.0")] public void add_point (OsmGps.MapPoint point); public void get_color (Gdk.RGBA color); public double get_length (); public unowned OsmGps.MapPoint get_point (int pos); [Version (since = "0.7.0")] public unowned GLib.SList get_points (); public void insert_point (OsmGps.MapPoint np, int pos); public int n_points (); public void remove_point (int pos); public void set_color (Gdk.RGBA color); [NoAccessorMethod] public float alpha { get; set construct; } [NoAccessorMethod] public Gdk.RGBA color { get; set; } [NoAccessorMethod] public bool editable { get; set construct; } [NoAccessorMethod] public float line_width { get; set construct; } [NoAccessorMethod] public void* track { get; construct; } [NoAccessorMethod] public bool visible { get; set construct; } public signal void point_added (OsmGps.MapPoint arg1); public signal void point_changed (int object); public signal void point_inserted (int object); public signal void point_removed (int object); } [CCode (cheader_filename = "osm-gps-map.h", type_id = "osm_gps_map_layer_get_type ()")] public interface MapLayer : GLib.Object { public abstract bool busy (); public abstract bool button_press (OsmGps.Map map, Gdk.EventButton event); public abstract void draw (OsmGps.Map map, Cairo.Context cr); public abstract void render (OsmGps.Map map); } [CCode (cheader_filename = "osm-gps-map.h", cprefix = "OSM_GPS_MAP_KEY_", has_type_id = false)] public enum MapKey_t { FULLSCREEN, ZOOMIN, ZOOMOUT, UP, DOWN, LEFT, RIGHT, MAX } [CCode (cheader_filename = "osm-gps-map.h", cprefix = "OSM_GPS_MAP_SOURCE_", has_type_id = false)] public enum MapSource_t { NULL, OPENSTREETMAP, OPENSTREETMAP_RENDERER, OPENAERIALMAP, MAPS_FOR_FREE, OPENCYCLEMAP, OSM_PUBLIC_TRANSPORT, GOOGLE_STREET, GOOGLE_SATELLITE, GOOGLE_HYBRID, VIRTUAL_EARTH_STREET, VIRTUAL_EARTH_SATELLITE, VIRTUAL_EARTH_HYBRID, OSMC_TRAILS, LAST } [CCode (cheader_filename = "osm-gps-map.h", cname = "OSM_GPS_MAP_CACHE_AUTO")] public const string MAP_CACHE_AUTO; [CCode (cheader_filename = "osm-gps-map.h", cname = "OSM_GPS_MAP_CACHE_DISABLED")] public const string MAP_CACHE_DISABLED; [CCode (cheader_filename = "osm-gps-map.h", cname = "OSM_GPS_MAP_CACHE_FRIENDLY")] public const string MAP_CACHE_FRIENDLY; [CCode (cheader_filename = "osm-gps-map.h", cname = "OSM_GPS_MAP_INVALID")] public const int MAP_INVALID; } osm-gps-map-1.2.2/src/converter.c000066400000000000000000000064631526276210300166330ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) Marcus Bauer 2008 * Copyright (C) 2013 John Stowers * Copyright (C) 2014 Martijn Goedhart * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include "private.h" #include "converter.h" /* * The (i)logb(x) function is equal to `floor(log(x) / log(2))` or * `floor(log2(x))`, but probably faster and also accepts negative values. * But this is only true when FLT_RADIX equals 2, which is on allmost all * machine. */ #if FLT_RADIX == 2 #define LOG2(x) (ilogb(x)) #else #define LOG2(x) ((int)floor(log2(abs(x)))) #endif float deg2rad(float deg) { return (deg * M_PI / 180.0); } float rad2deg(float rad) { return (rad / M_PI * 180.0); } int lat2pixel( int zoom, float lat) { float lat_m; int pixel_y; lat_m = atanh(sin(lat)); /* the formula is * * some more notes * http://manialabs.wordpress.com/2013/01/26/converting-latitude-and-longitude-to-map-tile-in-mercator-projection/ * * pixel_y = -(2^zoom * TILESIZE * lat_m) / 2PI + (2^zoom * TILESIZE) / 2 */ pixel_y = -(int)( (lat_m * TILESIZE * (1 << zoom) ) / (2*M_PI)) + ((1 << zoom) * (TILESIZE/2) ); return pixel_y; } int lon2pixel( int zoom, float lon) { int pixel_x; /* the formula is * * pixel_x = (2^zoom * TILESIZE * lon) / 2PI + (2^zoom * TILESIZE) / 2 */ pixel_x = (int)(( lon * TILESIZE * (1 << zoom) ) / (2*M_PI)) + ( (1 << zoom) * (TILESIZE/2) ); return pixel_x; } float pixel2lon( float zoom, int pixel_x) { float lon; lon = ((pixel_x - ( exp(zoom * M_LN2) * (TILESIZE/2) ) ) *2*M_PI) / (TILESIZE * exp(zoom * M_LN2) ); return lon; } float pixel2lat( float zoom, int pixel_y) { float lat, lat_m; lat_m = (-( pixel_y - ( exp(zoom * M_LN2) * (TILESIZE/2) ) ) * (2*M_PI)) / (TILESIZE * exp(zoom * M_LN2)); lat = asin(tanh(lat_m)); return lat; } int latlon2zoom(int pix_height, int pix_width, float lat1, float lat2, float lon1, float lon2) { float lat1_m = atanh(sin(lat1)); float lat2_m = atanh(sin(lat2)); float d_lon = lon2 - lon1; float d_lat = lat2_m - lat1_m; int zoom_lon = INT_MAX; int zoom_lat = INT_MAX; if (d_lon != 0.0f) zoom_lon = LOG2((double)(2 * pix_width * M_PI) / (TILESIZE * d_lon)); if (d_lat != 0.0f) zoom_lat = LOG2((double)(2 * pix_height * M_PI) / (TILESIZE * d_lat)); return MIN(zoom_lon, zoom_lat); } osm-gps-map-1.2.2/src/converter.h000066400000000000000000000025471526276210300166370ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) Marcus Bauer 2008 * Copyright (C) John Stowers 2013 * * Contributions by * Everaldo Canuto 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ float deg2rad(float deg); float rad2deg(float rad); int lat2pixel( int zoom, float lat); int lon2pixel( int zoom, float lon); float pixel2lon( float zoom, int pixel_x); float pixel2lat( float zoom, int pixel_y); int latlon2zoom(int pix_height, int pix_width, float lat1, float lat2, float lon1, float lon2); osm-gps-map-1.2.2/src/osd-utils.c000066400000000000000000000250451526276210300165440ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include #include "osd-utils.h" #define DEBUG_DRAWING 0 /* these can be overwritten with versions that support localization */ #define OSD_COORDINATES_CHR_N "N" #define OSD_COORDINATES_CHR_S "S" #define OSD_COORDINATES_CHR_E "E" #define OSD_COORDINATES_CHR_W "W" static void debug_bbox(cairo_t *cr, gint x, gint y, gint w, gint h) { #if DEBUG_DRAWING osd_draw_bbox(cr, x, y, w, h); #endif } /* this is the classic geocaching notation */ char * osd_latitude_str(float latitude) { char *c = OSD_COORDINATES_CHR_N; float integral, fractional; if(isnan(latitude)) return NULL; if(latitude < 0) { latitude = fabs(latitude); c = OSD_COORDINATES_CHR_S; } fractional = modff(latitude, &integral); return g_strdup_printf("%s %02d° %06.3f'", c, (int)integral, fractional*60.0); } char * osd_longitude_str(float longitude) { char *c = OSD_COORDINATES_CHR_E; float integral, fractional; if(isnan(longitude)) return NULL; if(longitude < 0) { longitude = fabs(longitude); c = OSD_COORDINATES_CHR_W; } fractional = modff(longitude, &integral); return g_strdup_printf("%s %03d° %06.3f'", c, (int)integral, fractional*60.0); } /* render a string at the given screen position */ int osd_render_centered_text(cairo_t *cr, int y, int width, int font_size, char *text) { if(!text) return y; char *p = g_malloc(strlen(text)+4); // space for "...\n" strcpy(p, text); cairo_text_extents_t extents; memset(&extents, 0, sizeof(cairo_text_extents_t)); cairo_text_extents (cr, p, &extents); g_assert(extents.width != 0.0); /* check if text needs to be truncated */ int trunc_at = strlen(text); while(extents.width > width) { /* cut off all utf8 multibyte remains so the actual */ /* truncation only deals with one byte */ while((p[trunc_at-1] & 0xc0) == 0x80) { trunc_at--; g_assert(trunc_at > 0); } trunc_at--; g_assert(trunc_at > 0); strcpy(p+trunc_at, "..."); cairo_text_extents (cr, p, &extents); } cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); cairo_set_line_width (cr, font_size/6); cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing); cairo_text_path (cr, p); cairo_stroke (cr); cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); cairo_move_to (cr, (width - extents.width)/2, y - extents.y_bearing); cairo_show_text (cr, p); g_free(p); /* skip + 1/5 line */ return y + 6*font_size/5; } void osd_render_crosshair_shape(cairo_t *cr, int w, int h, int r, int tick) { cairo_arc (cr, w/2, h/2, r, 0, 2*M_PI); cairo_move_to (cr, w/2 - r, h/2); cairo_rel_line_to (cr, -tick, 0); cairo_move_to (cr, w/2 + r, h/2); cairo_rel_line_to (cr, tick, 0); cairo_move_to (cr, w/2, h/2 - r); cairo_rel_line_to (cr, 0, -tick); cairo_move_to (cr, w/2, h/2 + r); cairo_rel_line_to (cr, 0, tick); cairo_stroke (cr); } void osd_shape_shadow(cairo_t *cr) { cairo_set_source_rgba (cr, 0, 0, 0, 0.2); cairo_fill (cr); cairo_stroke (cr); } void osd_shape(cairo_t *cr, GdkRGBA *bg, GdkRGBA *fg) { gdk_cairo_set_source_rgba(cr, bg); cairo_fill_preserve (cr); gdk_cairo_set_source_rgba(cr, fg); cairo_set_line_width (cr, 1); cairo_stroke (cr); } void osd_draw_bbox(cairo_t *cr, gint x, gint y, gint w, gint h) { cairo_move_to (cr, x, y); cairo_rel_line_to (cr, w, 0); cairo_rel_line_to (cr, 0, h); cairo_rel_line_to (cr, -w, 0); cairo_rel_line_to (cr, 0, -h); cairo_set_source_rgba (cr, 1, 0, 0, 0.5); // cairo_fill (cr); cairo_stroke (cr); } /* create the cairo shape used for the zoom buttons */ static void osd_zoom_shape(cairo_t *cr, gint x, gint y, gint w, gint h) { gint r = h/2; /* radius of curved ends of zoom pad */ x += r; cairo_move_to (cr, x, y); cairo_rel_line_to (cr, w-2*r, 0); cairo_arc (cr, x+w-2*r, y+r, r, -M_PI/2, M_PI/2); cairo_rel_line_to (cr, -(w-2*r), 0); cairo_arc (cr, x, y+r, r, M_PI/2, -M_PI/2); } static void osd_zoom_labels(cairo_t *cr, gint x, gint y, gint w, gint h) { gint r = h/2; /* radius of curved ends of zoom pad */ gint l = h/3; /* length of lines that draw -/+ */ x += r; cairo_move_to (cr, x-l, y+r); cairo_rel_line_to (cr, 2*l, 0); cairo_move_to (cr, x+w-2*r, y+r-l); cairo_rel_line_to (cr, 0, 2*l); cairo_move_to (cr, x+w-l-2*r, y+r); cairo_rel_line_to (cr, 2*l, 0); } void osd_render_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint gps, gint shadow, GdkRGBA *bg, GdkRGBA *fg) { /* add the width of the GPS widget */ w += gps; if (shadow) { osd_zoom_shape(cr, x+shadow, y+shadow, w, h); osd_shape_shadow(cr); } osd_zoom_shape(cr, x, y, w, h); osd_shape(cr, bg, fg); osd_zoom_labels(cr, x, y, w, h); osd_shape(cr, bg, fg); debug_bbox(cr, x, y, w, h); } static void osd_dpad_shape(cairo_t *cr, gint x, gint y, gint r) { cairo_arc (cr, x+r, y+r, r, 0, 2 * M_PI); } static void osd_dpad_labels(cairo_t *cr, gint x, gint y, gint r) { /* move reference to dpad center */ x += r; y += r; double D_TIP = 4*r/5; /* distance of arrow tip from dpad center */ double D_LEN = r/4; /* length of arrow */ double D_WID = D_LEN; /* width of arrow */ /* left arrow/triangle */ cairo_move_to (cr, x + (-D_TIP+D_LEN), y + (-D_WID)); cairo_rel_line_to (cr, -D_LEN, D_WID); cairo_rel_line_to (cr, +D_LEN, D_WID); /* right arrow/triangle */ cairo_move_to (cr, x + (+D_TIP-D_LEN), y + (-D_WID)); cairo_rel_line_to (cr, +D_LEN, D_WID); cairo_rel_line_to (cr, -D_LEN, D_WID); /* top arrow/triangle */ cairo_move_to (cr, x + (-D_WID), y + (-D_TIP+D_LEN)); cairo_rel_line_to (cr, D_WID, -D_LEN); cairo_rel_line_to (cr, D_WID, +D_LEN); /* bottom arrow/triangle */ cairo_move_to (cr, x + (-D_WID), y + (+D_TIP-D_LEN)); cairo_rel_line_to (cr, D_WID, +D_LEN); cairo_rel_line_to (cr, D_WID, -D_LEN); } void osd_render_dpad(cairo_t *cr, gint x, gint y, gint r, gint gps, gint shadow, GdkRGBA *bg, GdkRGBA *fg) { if (shadow) { osd_dpad_shape(cr, x+shadow, y+shadow, r); osd_shape_shadow(cr); } osd_dpad_shape(cr, x, y, r); osd_shape(cr, bg, fg); osd_dpad_labels(cr, x, y, r); osd_shape(cr, bg, fg); debug_bbox(cr, x, y, 2*r, 2*r); } gboolean osm_gps_map_in_circle(gint x, gint y, gint cx, gint cy, gint rad) { return( pow(cx - x, 2) + pow(cy - y, 2) < rad * rad); } OsdControlPress_t osd_check_dpad(gint x, gint y, gint r, gboolean has_gps) { /* within entire dpad circle */ if( osm_gps_map_in_circle(x, y, r, r, r)) { /* convert into position relative to dpads centre */ x -= r; y -= r; if (has_gps) if( osm_gps_map_in_circle(x, y, 0, 0, r/3)) return OSD_GPS; if( y < 0 && abs(x) < abs(y)) return OSD_UP; if( y > 0 && abs(x) < abs(y)) return OSD_DOWN; if( x < 0 && abs(y) < abs(x)) return OSD_LEFT; if( x > 0 && abs(y) < abs(x)) return OSD_RIGHT; } return OSD_NONE; } OsdControlPress_t osd_check_zoom(gint x, gint y, guint w, guint h, guint gps_w) { //osd_zoom_shape(cairo_t *cr, gint x, gint y, gint w, gint h) { //gint r = h/2; /* radius of curved ends of zoom pad */ // //x += r; // //cairo_move_to (cr, x, y); //cairo_rel_line_to (cr, w-2*r, 0); //cairo_arc (cr, x+w-2*r, y+r, r, -M_PI/2, M_PI/2); //cairo_rel_line_to (cr, -(w-2*r), 0); //cairo_arc (cr, x, y+r, r, M_PI/2, -M_PI/2); /* within entire zoom area */ if( x > 0 && x < w && y > 0 && y < h) { gint r = h/2; /* radius of curved ends of zoom pad */ /* within circle around (-) label */ if( osm_gps_map_in_circle(x, y, r, r, r)) return OSD_OUT; /* within circle around (+) label */ if( osm_gps_map_in_circle(x, y, w-r, r, r)) return OSD_IN; //#if Z_GPS == 1 // /* within square around center */ // if( x > Z_CENTER - Z_RAD && x < Z_CENTER + Z_RAD) // return OSD_GPS; //#endif // // /* between center of (-) button and center of entire zoom control area */ // if(x > OSD_LEFT && x < D_RAD) // return OSD_OUT; // // /* between center of (+) button and center of entire zoom control area */ // if(x < OSD_RIGHT && x > D_RAD) // return OSD_IN; } return OSD_NONE; } /* draw a satellite receiver dish */ void osd_render_gps(cairo_t *cr, gint x, gint y, gint w, GdkRGBA *bg, GdkRGBA *fg) { gint ox = x; gint oy = y; /* these define the gps widget shape */ double GPS_V0 = 1.5*w/7.0; double GPS_V1 = 1.5*w/10.0; double GPS_V2 = 1.5*w/5.0; /* move reference to bounding box center */ x += (2*w/5); y += (2*w/3); cairo_move_to (cr, x-GPS_V0, y+GPS_V0); cairo_rel_line_to (cr, +GPS_V0, -GPS_V0); cairo_rel_line_to (cr, +GPS_V0, +GPS_V0); cairo_close_path (cr); cairo_move_to (cr, x+GPS_V1-GPS_V2, y-2*GPS_V2); cairo_curve_to (cr, x-GPS_V2, y, x+GPS_V1, y+GPS_V1, x+GPS_V1+GPS_V2, y); cairo_close_path (cr); x += GPS_V1; cairo_move_to (cr, x, y-GPS_V2); cairo_rel_line_to (cr, +GPS_V1, -GPS_V1); osd_shape(cr, bg, fg); debug_bbox(cr, ox, oy, w, w); } osm-gps-map-1.2.2/src/osd-utils.h000066400000000000000000000041661526276210300165520ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) Marcus Bauer 2008 * Copyright (C) John Stowers 2013 * * Contributions by * Everaldo Canuto 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __OSD_UTILS_H__ #define __OSD_UTILS_H__ #include #include typedef enum { OSD_NONE, OSD_UP, OSD_DOWN, OSD_LEFT, OSD_RIGHT, OSD_GPS, OSD_OUT, OSD_IN } OsdControlPress_t; char *osd_latitude_str(float latitude); char *osd_longitude_str(float longitude); int osd_render_centered_text(cairo_t *cr, int y, int width, int font_size, char *text); void osd_render_crosshair_shape(cairo_t *cr, int w, int h, int r, int tick); void osd_shape_shadow(cairo_t *cr); void osd_shape(cairo_t *cr, GdkRGBA *bg, GdkRGBA *fg); void osd_render_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint gps, gint shadow, GdkRGBA *bg, GdkRGBA *fg); void osd_render_dpad(cairo_t *cr, gint x, gint y, gint r, gint gps, gint shadow, GdkRGBA *bg, GdkRGBA *fg); void osd_draw_bbox(cairo_t *cr, gint x, gint y, gint w, gint h); gboolean osm_gps_map_in_circle(gint x, gint y, gint cx, gint cy, gint rad); OsdControlPress_t osd_check_dpad(gint x, gint y, gint r, gboolean has_gps); OsdControlPress_t osd_check_zoom(gint x, gint y, guint w, guint h, guint gps_w); void osd_render_gps(cairo_t *cr, gint x, gint y, gint r, GdkRGBA *bg, GdkRGBA *fg); #endif /* __OSD_UTILS_H__ */ osm-gps-map-1.2.2/src/osm-gps-map-compat.c000066400000000000000000000015561526276210300202430ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "converter.h" #include "osm-gps-map-compat.h" osm-gps-map-1.2.2/src/osm-gps-map-compat.h000066400000000000000000000017231526276210300202440ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_COMPAT_H #define _OSM_GPS_MAP_COMPAT_H #include "osm-gps-map-widget.h" G_BEGIN_DECLS G_END_DECLS #endif /* _OSM_GPS_MAP_COMPAT_H */ osm-gps-map-1.2.2/src/osm-gps-map-image.c000066400000000000000000000235251526276210300200420ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:osm-gps-map-image * @short_description: An image shown on the map * @stability: Stable * @include: osm-gps-map.h * * #OsmGpsMapImage represents an image (a #GdkPixbuf) shown on the map * (osm_gps_map_image_add()) at a specific location (a #OsmGpsMapPoint). **/ #include #include #include "converter.h" #include "osm-gps-map-track.h" #include "osm-gps-map-image.h" enum { PROP_0, PROP_PIXBUF, PROP_X_ALIGN, PROP_Y_ALIGN, PROP_POINT, PROP_Z_ORDER, PROP_ROTATION }; struct _OsmGpsMapImagePrivate { OsmGpsMapPoint *pt; GdkPixbuf *pixbuf; int w; int h; gfloat xalign; gfloat yalign; int zorder; float rotation; }; G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapImage, osm_gps_map_image, G_TYPE_OBJECT) static void osm_gps_map_image_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsmGpsMapImagePrivate *priv = OSM_GPS_MAP_IMAGE(object)->priv; switch (property_id) { case PROP_PIXBUF: g_value_set_object (value, priv->pixbuf); break; case PROP_X_ALIGN: g_value_set_float (value, priv->xalign); break; case PROP_Y_ALIGN: g_value_set_float (value, priv->yalign); break; case PROP_POINT: g_value_set_boxed (value, priv->pt); break; case PROP_Z_ORDER: g_value_set_int (value, priv->zorder); break; case PROP_ROTATION: g_value_set_float(value, priv->rotation); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_image_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsmGpsMapImagePrivate *priv = OSM_GPS_MAP_IMAGE(object)->priv; switch (property_id) { case PROP_PIXBUF: if (priv->pixbuf) g_object_unref (priv->pixbuf); priv->pixbuf = g_value_dup_object (value); priv->w = gdk_pixbuf_get_width(priv->pixbuf); priv->h = gdk_pixbuf_get_height(priv->pixbuf); break; case PROP_X_ALIGN: priv->xalign = g_value_get_float (value); break; case PROP_Y_ALIGN: priv->yalign = g_value_get_float (value); break; case PROP_POINT: priv->pt = g_value_dup_boxed (value); break; case PROP_Z_ORDER: priv->zorder = g_value_get_int (value); break; case PROP_ROTATION: priv->rotation = g_value_get_float(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_image_dispose (GObject *object) { OsmGpsMapImagePrivate *priv = OSM_GPS_MAP_IMAGE(object)->priv; if (priv->pixbuf) g_object_unref (priv->pixbuf); G_OBJECT_CLASS (osm_gps_map_image_parent_class)->dispose (object); } static void osm_gps_map_image_finalize (GObject *object) { G_OBJECT_CLASS (osm_gps_map_image_parent_class)->finalize (object); } static void osm_gps_map_image_class_init (OsmGpsMapImageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->get_property = osm_gps_map_image_get_property; object_class->set_property = osm_gps_map_image_set_property; object_class->dispose = osm_gps_map_image_dispose; object_class->finalize = osm_gps_map_image_finalize; g_object_class_install_property (object_class, PROP_PIXBUF, g_param_spec_object ("pixbuf", "pixbuf", "the pixbuf for this image", GDK_TYPE_PIXBUF, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_X_ALIGN, g_param_spec_float ("x-align", "x-align", "image x-alignment", 0.0, /* minimum property value */ 1.0, /* maximum property value */ 0.5, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_Y_ALIGN, g_param_spec_float ("y-align", "y-align", "image y-alignment", 0.0, /* minimum property value */ 1.0, /* maximum property value */ 0.5, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_POINT, g_param_spec_boxed ("point", "point", "location point", OSM_TYPE_GPS_MAP_POINT, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_Z_ORDER, g_param_spec_int ("z-order", "z-order", "image z-order", -100, /* minimum property value */ 100, /* maximum property value */ 0, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_ROTATION, g_param_spec_float ("rotation", "rotation", "image rotation", -180.0, /* minimum property value */ 180.0, /* maximum property value */ 0.0f, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); } static void osm_gps_map_image_init (OsmGpsMapImage *self) { self->priv = osm_gps_map_image_get_instance_private (self); } OsmGpsMapImage * osm_gps_map_image_new (void) { return g_object_new (OSM_TYPE_GPS_MAP_IMAGE, NULL); } void osm_gps_map_image_draw (OsmGpsMapImage *object, cairo_t *cr, GdkRectangle *rect) { OsmGpsMapImagePrivate *priv; int xoffset, yoffset; gdouble x,y; g_return_if_fail (OSM_GPS_MAP_IS_IMAGE (object)); priv = OSM_GPS_MAP_IMAGE(object)->priv; xoffset = priv->xalign * priv->w; yoffset = priv->yalign * priv->h; x = rect->x - xoffset; y = rect->y - yoffset; cairo_translate(cr, x+(priv->w/2), y+(priv->h/2)); cairo_rotate(cr, deg2rad(priv->rotation)); cairo_translate(cr, -(x+(priv->w/2)), -(y+(priv->h/2))); gdk_cairo_set_source_pixbuf (cr, priv->pixbuf, x, y); cairo_paint (cr); cairo_translate(cr, x+(priv->w/2), y+(priv->h/2)); cairo_rotate(cr, -deg2rad(priv->rotation)); cairo_translate(cr, -(x+(priv->w/2)), -(y+(priv->h/2))); rect->width = priv->w; rect->height = priv->h; } const OsmGpsMapPoint * osm_gps_map_image_get_point(OsmGpsMapImage *object) { g_return_val_if_fail (OSM_GPS_MAP_IS_IMAGE (object), NULL); return object->priv->pt; } gint osm_gps_map_image_get_zorder(OsmGpsMapImage *object) { g_return_val_if_fail (OSM_GPS_MAP_IS_IMAGE (object), 0); return object->priv->zorder; } float osm_gps_map_image_get_rotation(OsmGpsMapImage* object) { return object->priv->rotation; } void osm_gps_map_image_set_rotation(OsmGpsMapImage* object, float rot) { object->priv->rotation = rot; } osm-gps-map-1.2.2/src/osm-gps-map-image.h000066400000000000000000000066631526276210300200530ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_IMAGE_H #define _OSM_GPS_MAP_IMAGE_H #include #include #include #include "osm-gps-map-point.h" G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP_IMAGE osm_gps_map_image_get_type() #define OSM_GPS_MAP_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP_IMAGE, OsmGpsMapImage)) #define OSM_GPS_MAP_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSM_TYPE_GPS_MAP_IMAGE, OsmGpsMapImageClass)) #define OSM_GPS_MAP_IS_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP_IMAGE)) #define OSM_GPS_MAP_IS_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSM_TYPE_GPS_MAP_IMAGE)) #define OSM_GPS_MAP_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSM_TYPE_GPS_MAP_IMAGE, OsmGpsMapImageClass)) typedef struct _OsmGpsMapImage OsmGpsMapImage; typedef struct _OsmGpsMapImageClass OsmGpsMapImageClass; typedef struct _OsmGpsMapImagePrivate OsmGpsMapImagePrivate; struct _OsmGpsMapImage { GObject parent; OsmGpsMapImagePrivate *priv; }; struct _OsmGpsMapImageClass { GObjectClass parent_class; }; /** * osm_gps_map_image_get_type: * * Get image type * * Return value: (element-type GType): The type of the image * Since: 0.7.0 **/ GType osm_gps_map_image_get_type (void) G_GNUC_CONST; /** * osm_gps_map_image_new: * * Create new image * * Returns: (transfer full): New image * Since: 0.7.0 **/ OsmGpsMapImage *osm_gps_map_image_new (void); /** * osm_gps_map_image_draw: * @object: a #OsmGpsMapImage * @cr: cairo context * @rect: (inout): bounding rectangle * * Draw image to given cairo context * * Since: 0.7.0 **/ void osm_gps_map_image_draw (OsmGpsMapImage *object, cairo_t *cr, GdkRectangle *rect); /** * osm_gps_map_image_get_point: * @object: a #OsmGpsMapImage * * Get image location point * * Returns: (transfer none): location point * Since: 0.7.0 **/ const OsmGpsMapPoint *osm_gps_map_image_get_point(OsmGpsMapImage *object); /** * osm_gps_map_image_get_zorder: * @object: a #OsmGpsMapImage * * Get image z-order * * Returns: z-order * Since: 1.0.0 **/ gint osm_gps_map_image_get_zorder(OsmGpsMapImage *object); /** * osm_gps_map_image_get_rotation: * @object: a #OsmGpsMapImage * * Get image rotation * * Returns: rotation * Since: 1.1.0 **/ float osm_gps_map_image_get_rotation(OsmGpsMapImage* object); /** * osm_gps_map_image_set_rotation: * @object: a #OsmGpsMapImage * @rot: image rotation in degrees * * Set image rotation * Since: 1.1.0 **/ void osm_gps_map_image_set_rotation(OsmGpsMapImage* object, float rot); G_END_DECLS #endif /* _OSM_GPS_MAP_IMAGE_H */ osm-gps-map-1.2.2/src/osm-gps-map-layer.c000066400000000000000000000047241526276210300200740ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:osm-gps-map-layer * @short_description: An interface for layers to be drawn on the map * @stability: Stable * @include: osm-gps-map.h * * #OsmGpsMapLayer is an interface implemented by objects that wish * to draw on top of the map and respond to button press events. The most * common implementation of this interface is #OsmGpsMapOsd. * * The map already provides a cairo context in osm_gps_map_layer_draw(). * Convert lat/lon to widget pixels with * osm_gps_map_convert_geographic_to_screen(). See DrawLayer in * examples/mapviewer.py and examples/mapviewer.c. For tracks and images * use osm_gps_map_track_add() and osm_gps_map_image_add() instead of a * custom layer. **/ #include "osm-gps-map-layer.h" GType osm_gps_map_layer_get_type() { static GType object_type = 0; if (!object_type) { static const GTypeInfo object_info = { sizeof(OsmGpsMapLayerIface), NULL, /* base init */ NULL, /* base finalize */ }; object_type = g_type_register_static(G_TYPE_INTERFACE, "OsmGpsMapLayer", &object_info, 0); } return object_type; } void osm_gps_map_layer_render (OsmGpsMapLayer *self, OsmGpsMap *map) { OSM_GPS_MAP_LAYER_GET_INTERFACE (self)->render (self, map); } void osm_gps_map_layer_draw (OsmGpsMapLayer *self, OsmGpsMap *map, cairo_t *cr) { OSM_GPS_MAP_LAYER_GET_INTERFACE (self)->draw (self, map, cr); } gboolean osm_gps_map_layer_busy (OsmGpsMapLayer *self) { return OSM_GPS_MAP_LAYER_GET_INTERFACE (self)->busy (self); } gboolean osm_gps_map_layer_button_press (OsmGpsMapLayer *self, OsmGpsMap *map, GdkEventButton *event) { return OSM_GPS_MAP_LAYER_GET_INTERFACE (self)->button_press (self, map, event); } osm-gps-map-1.2.2/src/osm-gps-map-layer.h000066400000000000000000000077121526276210300201010ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 cino=t0,(0: */ /* * Copyright (C) Marcus Bauer 2008 * Copyright (C) John Stowers 2013 * Copyright (C) Till Harbaum 2009 * * Contributions by * Everaldo Canuto 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_LAYER_H_ #define _OSM_GPS_MAP_LAYER_H_ #include #include #include #include G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP_LAYER (osm_gps_map_layer_get_type ()) #define OSM_GPS_MAP_LAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP_LAYER, OsmGpsMapLayer)) #define OSM_GPS_MAP_IS_LAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP_LAYER)) #define OSM_GPS_MAP_LAYER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), OSM_TYPE_GPS_MAP_LAYER, OsmGpsMapLayerIface)) typedef struct _OsmGpsMapLayer OsmGpsMapLayer; /* dummy object */ typedef struct _OsmGpsMapLayerIface OsmGpsMapLayerIface; #include "osm-gps-map-widget.h" struct _OsmGpsMapLayerIface { GTypeInterface parent; void (*render) (OsmGpsMapLayer *self, OsmGpsMap *map); void (*draw) (OsmGpsMapLayer *self, OsmGpsMap *map, cairo_t *cr); gboolean (*busy) (OsmGpsMapLayer *self); gboolean (*button_press) (OsmGpsMapLayer *self, OsmGpsMap *map, GdkEventButton *event); }; /** * osm_gps_map_layer_get_type: * * Get layer type * * Return value: (element-type GType): The type of the layer * Since: 0.6.0 **/ GType osm_gps_map_layer_get_type (void); /** * osm_gps_map_layer_render: * @self: (in): a #OsmGpsMapLayer object * @map: (in): a #OsmGpsMap widget * * Called when the offscreen map pixmap is rebuilt. Use this to update * cached drawing (as #OsmGpsMapOsd does). Geographic overlays can leave * this empty and paint in osm_gps_map_layer_draw() instead. * * Since: 0.6.0 **/ void osm_gps_map_layer_render (OsmGpsMapLayer *self, OsmGpsMap *map); /** * osm_gps_map_layer_draw: * @self: (in): a #OsmGpsMapLayer object * @map: (in): a #OsmGpsMap widget * @cr: (in): a cairo context to draw to * * During #GtkWidget::draw the map passes its cairo context here. Draw in * widget pixel coordinates. Convert geographic positions with * osm_gps_map_convert_geographic_to_screen(). Do not create your own * cairo surface; the map already has one. For GPS tracks and markers * prefer osm_gps_map_track_add() and osm_gps_map_image_add(). * * Since: 0.6.0 **/ void osm_gps_map_layer_draw (OsmGpsMapLayer *self, OsmGpsMap *map, cairo_t *cr); /** * osm_gps_map_layer_busy: * @self: (in): a #OsmGpsMapLayer object * * Check whether layer is busy (eg drawing an animation) * * Returns: layer busy state * Since: 0.6.0 **/ gboolean osm_gps_map_layer_busy (OsmGpsMapLayer *self); /** * osm_gps_map_layer_button_press: * @self: (in): a #OsmGpsMapLayer object * @map: (in): a #OsmGpsMap widget * @event: (in): a #GdkEventButton event * * Handle button event * * Returns: whether the event had been handled * Since: 0.6.0 **/ gboolean osm_gps_map_layer_button_press (OsmGpsMapLayer *self, OsmGpsMap *map, GdkEventButton *event); G_END_DECLS #endif /* _OSM_GPS_MAP_LAYER_H_ */ osm-gps-map-1.2.2/src/osm-gps-map-osd.c000066400000000000000000001044711526276210300175450ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include "osd-utils.h" #include "private.h" #include "osm-gps-map-layer.h" #include "osm-gps-map-osd.h" #include "osm-gps-map-source.h" static void osm_gps_map_osd_interface_init (OsmGpsMapLayerIface *iface); enum { PROP_0, PROP_OSD_X, PROP_OSD_Y, PROP_DPAD_RADIUS, PROP_SHOW_SCALE, PROP_SHOW_COORDINATES, PROP_SHOW_CROSSHAIR, PROP_SHOW_DPAD, PROP_SHOW_ZOOM, PROP_SHOW_GPS_IN_DPAD, PROP_SHOW_GPS_IN_ZOOM, PROP_SHOW_COPYRIGHT, }; typedef struct _OsdScale { cairo_surface_t *surface; int zoom; float lat; } OsdScale_t; typedef struct _OsdCoordinates { cairo_surface_t *surface; float lat, lon; } OsdCoordinates_t; typedef struct _OsdCorosshair { cairo_surface_t *surface; gboolean rendered; } OsdCrosshair_t; typedef struct _OsdControls { cairo_surface_t *surface; gboolean rendered; gint gps_enabled; } OsdControls_t; typedef struct _OsdCopyright { cairo_surface_t *surface; gint map_source; } OsdCopyright_t; struct _OsmGpsMapOsdPrivate { OsdScale_t *scale; OsdCoordinates_t *coordinates; OsdCrosshair_t *crosshair; OsdControls_t *controls; OsdCopyright_t *copyright; guint osd_w; guint osd_h; guint osd_shadow; guint osd_pad; guint zoom_w; guint zoom_h; /* properties */ gint osd_x; gint osd_y; guint dpad_radius; gboolean show_scale; gboolean show_coordinates; gboolean show_crosshair; gboolean show_dpad; gboolean show_zoom; gboolean show_gps_in_dpad; gboolean show_gps_in_zoom; gboolean show_copyright; }; G_DEFINE_TYPE_WITH_CODE (OsmGpsMapOsd, osm_gps_map_osd, G_TYPE_OBJECT, G_ADD_PRIVATE(OsmGpsMapOsd) G_IMPLEMENT_INTERFACE (OSM_TYPE_GPS_MAP_LAYER, osm_gps_map_osd_interface_init)); static void osm_gps_map_osd_render (OsmGpsMapLayer *osd, OsmGpsMap *map); static void osm_gps_map_osd_draw (OsmGpsMapLayer *osd, OsmGpsMap *map, cairo_t *cr); static gboolean osm_gps_map_osd_busy (OsmGpsMapLayer *osd); static gboolean osm_gps_map_osd_button_press (OsmGpsMapLayer *osd, OsmGpsMap *map, GdkEventButton *event); static void scale_render (OsmGpsMapOsd *self, OsmGpsMap *map); static void scale_draw (OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr); static void coordinates_render (OsmGpsMapOsd *self, OsmGpsMap *map); static void coordinates_draw (OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr); static void crosshair_render (OsmGpsMapOsd *self, OsmGpsMap *map); static void crosshair_draw (OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr); static void controls_render (OsmGpsMapOsd *self, OsmGpsMap *map); static void controls_draw (OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr); static void copyright_render (OsmGpsMapOsd *self, OsmGpsMap *map); static void copyright_draw (OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr); #define OSD_MAX_SHADOW (4) #define OSD_SCALE_FONT_SIZE (12.0) #define OSD_SCALE_W (10*OSD_SCALE_FONT_SIZE) #define OSD_SCALE_H (5*OSD_SCALE_FONT_SIZE/2) #define OSD_SCALE_H2 (OSD_SCALE_H/2) #define OSD_SCALE_TICK (2*OSD_SCALE_FONT_SIZE/3) #define OSD_SCALE_M (OSD_SCALE_H2 - OSD_SCALE_TICK) #define OSD_SCALE_I (OSD_SCALE_H2 + OSD_SCALE_TICK) #define OSD_SCALE_FD (OSD_SCALE_FONT_SIZE/4) #define OSD_COORDINATES_FONT_SIZE (12.0) #define OSD_COORDINATES_OFFSET (OSD_COORDINATES_FONT_SIZE/6) #define OSD_COORDINATES_W (8*OSD_COORDINATES_FONT_SIZE+2*OSD_COORDINATES_OFFSET) #define OSD_COORDINATES_H (2*OSD_COORDINATES_FONT_SIZE+2*OSD_COORDINATES_OFFSET+OSD_COORDINATES_FONT_SIZE/4) #define OSD_CROSSHAIR_RADIUS 10 #define OSD_CROSSHAIR_TICK (OSD_CROSSHAIR_RADIUS/2) #define OSD_CROSSHAIR_BORDER (OSD_CROSSHAIR_TICK + OSD_CROSSHAIR_RADIUS/4) #define OSD_CROSSHAIR_W ((OSD_CROSSHAIR_RADIUS+OSD_CROSSHAIR_BORDER)*2) #define OSD_CROSSHAIR_H ((OSD_CROSSHAIR_RADIUS+OSD_CROSSHAIR_BORDER)*2) #define OSD_COPYRIGHT_FONT_SIZE (10.0) #define OSD_COPYRIGHT_W 360 #define OSD_COPYRIGHT_H (OSD_COPYRIGHT_FONT_SIZE) static void osm_gps_map_osd_interface_init (OsmGpsMapLayerIface *iface) { iface->render = osm_gps_map_osd_render; iface->draw = osm_gps_map_osd_draw; iface->busy = osm_gps_map_osd_busy; iface->button_press = osm_gps_map_osd_button_press; } static void osm_gps_map_osd_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_OSD_X: g_value_set_int (value, OSM_GPS_MAP_OSD (object)->priv->osd_x); break; case PROP_OSD_Y: g_value_set_int (value, OSM_GPS_MAP_OSD (object)->priv->osd_y); break; case PROP_DPAD_RADIUS: g_value_set_uint (value, OSM_GPS_MAP_OSD (object)->priv->dpad_radius); break; case PROP_SHOW_SCALE: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_scale); break; case PROP_SHOW_COORDINATES: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_coordinates); break; case PROP_SHOW_CROSSHAIR: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_crosshair); break; case PROP_SHOW_DPAD: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_dpad); break; case PROP_SHOW_ZOOM: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_zoom); break; case PROP_SHOW_GPS_IN_DPAD: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_gps_in_dpad); break; case PROP_SHOW_GPS_IN_ZOOM: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_gps_in_zoom); break; case PROP_SHOW_COPYRIGHT: g_value_set_boolean (value, OSM_GPS_MAP_OSD (object)->priv->show_copyright); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_osd_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_OSD_X: OSM_GPS_MAP_OSD (object)->priv->osd_x = g_value_get_int (value); break; case PROP_OSD_Y: OSM_GPS_MAP_OSD (object)->priv->osd_y = g_value_get_int (value); break; case PROP_DPAD_RADIUS: OSM_GPS_MAP_OSD (object)->priv->dpad_radius = g_value_get_uint (value); break; case PROP_SHOW_SCALE: OSM_GPS_MAP_OSD (object)->priv->show_scale = g_value_get_boolean (value); break; case PROP_SHOW_COORDINATES: OSM_GPS_MAP_OSD (object)->priv->show_coordinates = g_value_get_boolean (value); break; case PROP_SHOW_CROSSHAIR: OSM_GPS_MAP_OSD (object)->priv->show_crosshair = g_value_get_boolean (value); break; case PROP_SHOW_DPAD: OSM_GPS_MAP_OSD (object)->priv->show_dpad = g_value_get_boolean (value); break; case PROP_SHOW_ZOOM: OSM_GPS_MAP_OSD (object)->priv->show_zoom = g_value_get_boolean (value); break; case PROP_SHOW_GPS_IN_DPAD: OSM_GPS_MAP_OSD (object)->priv->show_gps_in_dpad = g_value_get_boolean (value); break; case PROP_SHOW_GPS_IN_ZOOM: OSM_GPS_MAP_OSD (object)->priv->show_gps_in_zoom = g_value_get_boolean (value); break; case PROP_SHOW_COPYRIGHT: OSM_GPS_MAP_OSD (object)->priv->show_copyright = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static GObject * osm_gps_map_osd_constructor (GType gtype, guint n_properties, GObjectConstructParam *properties) { GObject *object; OsmGpsMapOsdPrivate *priv; /* Always chain up to the parent constructor */ object = G_OBJECT_CLASS(osm_gps_map_osd_parent_class)->constructor(gtype, n_properties, properties); priv = OSM_GPS_MAP_OSD(object)->priv; /* shadow also depends on control size */ priv->osd_shadow = MAX(priv->dpad_radius/8, OSD_MAX_SHADOW); /* distance between dpad and zoom */ priv->osd_pad = priv->dpad_radius/4; /* size of zoom pad is wrt. the dpad size */ priv->zoom_w = 2*priv->dpad_radius; priv->zoom_h = priv->dpad_radius; /* total width and height of controls incl. shadow */ priv->osd_w = 2*priv->dpad_radius + priv->osd_shadow + priv->zoom_w; priv->osd_h = 2*priv->dpad_radius + priv->osd_pad + priv->zoom_h + 2*priv->osd_shadow; priv->scale = g_new0(OsdScale_t, 1); priv->scale->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, OSD_SCALE_W, OSD_SCALE_H); priv->scale->zoom = -1; priv->scale->lat = 360.0; /* init to an invalid lat so we get re-rendered */ priv->coordinates = g_new0(OsdCoordinates_t, 1); priv->coordinates->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, OSD_COORDINATES_W, OSD_COORDINATES_H); priv->coordinates->lat = priv->coordinates->lon = OSM_GPS_MAP_INVALID; priv->crosshair = g_new0(OsdCrosshair_t, 1); priv->crosshair->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, OSD_CROSSHAIR_W, OSD_CROSSHAIR_H); priv->crosshair->rendered = FALSE; priv->controls = g_new0(OsdControls_t, 1); //FIXME: SIZE DEPENDS ON IF DPAD AND ZOOM IS THERE OR NOT priv->controls->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, priv->osd_w+2, priv->osd_h+2); priv->controls->rendered = FALSE; priv->controls->gps_enabled = -1; priv->copyright = g_new0(OsdCopyright_t, 1); priv->copyright->surface = FALSE; priv->copyright->map_source = FALSE; return object; } #define OSD_STRUCT_DESTROY(_x) \ if ((_x)) { \ if ((_x)->surface) \ cairo_surface_destroy((_x)->surface); \ g_free((_x)); \ } static void osm_gps_map_osd_finalize (GObject *object) { OsmGpsMapOsdPrivate *priv = OSM_GPS_MAP_OSD(object)->priv; OSD_STRUCT_DESTROY(priv->scale) OSD_STRUCT_DESTROY(priv->coordinates) OSD_STRUCT_DESTROY(priv->crosshair) OSD_STRUCT_DESTROY(priv->controls) OSD_STRUCT_DESTROY(priv->copyright) G_OBJECT_CLASS (osm_gps_map_osd_parent_class)->finalize (object); } static void osm_gps_map_osd_class_init (OsmGpsMapOsdClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->get_property = osm_gps_map_osd_get_property; object_class->set_property = osm_gps_map_osd_set_property; object_class->constructor = osm_gps_map_osd_constructor; object_class->finalize = osm_gps_map_osd_finalize; /** * OsmGpsMapOsd:osd-x: * * The osd x property. */ g_object_class_install_property (object_class, PROP_OSD_X, g_param_spec_int ("osd-x", "osd-x", "osd-x", G_MININT, G_MAXINT, 10, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:osd-y: * * The osd y property. */ g_object_class_install_property (object_class, PROP_OSD_Y, g_param_spec_int ("osd-y", "osd-y", "osd-y", G_MININT, G_MAXINT, 10, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:dpad-radius: * * The dpad radius property. */ g_object_class_install_property (object_class, PROP_DPAD_RADIUS, g_param_spec_uint ("dpad-radius", "dpad-radius", "dpad radius", 0, G_MAXUINT, 30, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-scale: * * The show scale on the map property. */ g_object_class_install_property (object_class, PROP_SHOW_SCALE, g_param_spec_boolean ("show-scale", "show-scale", "show scale on the map", TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-coordinates: * * The show coordinates of map centre property. */ g_object_class_install_property (object_class, PROP_SHOW_COORDINATES, g_param_spec_boolean ("show-coordinates", "show-coordinates", "show coordinates of map centre", TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-crosshair: * * The show crosshair at map centre property. */ g_object_class_install_property (object_class, PROP_SHOW_CROSSHAIR, g_param_spec_boolean ("show-crosshair", "show-crosshair", "show crosshair at map centre", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-dpad: * * The show dpad for map navigation property. */ g_object_class_install_property (object_class, PROP_SHOW_DPAD, g_param_spec_boolean ("show-dpad", "show-dpad", "show dpad for map navigation", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-zoom: * * The show zoom control for map navigation property. */ g_object_class_install_property (object_class, PROP_SHOW_ZOOM, g_param_spec_boolean ("show-zoom", "show-zoom", "show zoom control for map navigation", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-gps-in-dpad: * * The show gps indicator in middle of dpad property. */ g_object_class_install_property (object_class, PROP_SHOW_GPS_IN_DPAD, g_param_spec_boolean ("show-gps-in-dpad", "show-gps-in-dpad", "show gps indicator in middle of dpad", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-gps-in-zoom: * * The show gps indicator in middle of zoom control property. */ g_object_class_install_property (object_class, PROP_SHOW_GPS_IN_ZOOM, g_param_spec_boolean ("show-gps-in-zoom", "show-gps-in-zoom", "show gps indicator in middle of zoom control", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapOsd:show-copyright: * * The show copyright property. * Since: 1.2.0 */ g_object_class_install_property (object_class, PROP_SHOW_COPYRIGHT, g_param_spec_boolean ("show-copyright", "show-copyright", "show copyright information for build-in map-sources on the map", TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); } static void osm_gps_map_osd_init (OsmGpsMapOsd *self) { self->priv = osm_gps_map_osd_get_instance_private (self); } static void osm_gps_map_osd_render (OsmGpsMapLayer *osd, OsmGpsMap *map) { OsmGpsMapOsd *self; OsmGpsMapOsdPrivate *priv; g_return_if_fail(OSM_GPS_MAP_IS_OSD(osd)); self = OSM_GPS_MAP_OSD(osd); priv = self->priv; if (priv->show_scale) scale_render(self, map); if (priv->show_coordinates) coordinates_render(self, map); if (priv->show_crosshair) crosshair_render(self, map); if (priv->show_zoom || priv->show_dpad) controls_render(self, map); if (priv->show_copyright) copyright_render(self, map); } static void osm_gps_map_osd_draw (OsmGpsMapLayer *osd, OsmGpsMap *map, cairo_t *cr) { OsmGpsMapOsd *self; OsmGpsMapOsdPrivate *priv; GtkAllocation allocation; g_return_if_fail(OSM_GPS_MAP_IS_OSD(osd)); self = OSM_GPS_MAP_OSD(osd); priv = self->priv; gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); if (priv->show_scale) scale_draw(self, &allocation, cr); if (priv->show_coordinates) coordinates_draw(self, &allocation, cr); if (priv->show_crosshair) crosshair_draw(self, &allocation, cr); if (priv->show_zoom || priv->show_dpad) controls_draw(self, &allocation, cr); if (priv->show_copyright) copyright_draw(self, &allocation, cr); } static gboolean osm_gps_map_osd_busy (OsmGpsMapLayer *osd) { return FALSE; } static gboolean osm_gps_map_osd_button_press (OsmGpsMapLayer *osd, OsmGpsMap *map, GdkEventButton *event) { gboolean handled = FALSE; OsdControlPress_t but = OSD_NONE; OsmGpsMapOsd *self; OsmGpsMapOsdPrivate *priv; GtkAllocation allocation; g_return_val_if_fail(OSM_GPS_MAP_IS_OSD(osd), FALSE); self = OSM_GPS_MAP_OSD(osd); priv = self->priv; gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); if ((event->button == 1) && (event->type == GDK_BUTTON_PRESS)) { gint mx = event->x - priv->osd_x; gint my = event->y - priv->osd_y; if(priv->osd_x < 0) mx -= (allocation.width - priv->osd_w); if(priv->osd_y < 0) my -= (allocation.height - priv->osd_h); /* first do a rough test for the OSD area. */ /* this is just to avoid an unnecessary detailed test */ if(mx > 0 && mx < priv->osd_w && my > 0 && my < priv->osd_h) { if (priv->show_dpad) { but = osd_check_dpad(mx, my, priv->dpad_radius, priv->show_gps_in_dpad); my -= (2*priv->dpad_radius); my -= priv->osd_pad; } if (but == OSD_NONE && priv->show_zoom) but = osd_check_zoom(mx, my, priv->zoom_w, priv->zoom_h, 0 /*show gps*/); } } switch (but) { case OSD_LEFT: osm_gps_map_scroll(map, -5, 0); handled = TRUE; break; case OSD_RIGHT: osm_gps_map_scroll(map, 5, 0); handled = TRUE; break; case OSD_UP: osm_gps_map_scroll(map, 0, -5); handled = TRUE; break; case OSD_DOWN: osm_gps_map_scroll(map, 0, 5); handled = TRUE; break; case OSD_OUT: osm_gps_map_zoom_out(map); handled = TRUE; break; case OSD_IN: osm_gps_map_zoom_in(map); handled = TRUE; break; case OSD_NONE: case OSD_GPS: default: handled = FALSE; break; } return handled; } /** * osm_gps_map_osd_new: * * Creates a new instance of #OsmGpsMapOsd. * * Return value: the newly created #OsmGpsMapOsd instance */ OsmGpsMapOsd* osm_gps_map_osd_new (void) { return g_object_new (OSM_TYPE_GPS_MAP_OSD, NULL); } static void scale_render(OsmGpsMapOsd *self, OsmGpsMap *map) { OsdScale_t *scale = self->priv->scale; if(!scale->surface) return; /* this only needs to be rendered if the zoom or latitude has changed */ gint zoom; gfloat lat; g_object_get(G_OBJECT(map), "zoom", &zoom, "latitude", &lat, NULL); if(zoom == scale->zoom && lat == scale->lat) return; scale->zoom = zoom; scale->lat = lat; float m_per_pix = osm_gps_map_get_scale(map); /* first fill with transparency */ g_assert(scale->surface); cairo_t *cr = cairo_create(scale->surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.0); // pink for testing: cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.2); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); /* determine the size of the scale width in meters */ float width = (OSD_SCALE_W-OSD_SCALE_FONT_SIZE/6) * m_per_pix; /* scale this to useful values */ int exp = logf(width)*M_LOG10E; int mant = width/pow(10,exp); int width_metric = mant * pow(10,exp); char *dist_str = NULL; if(width_metric<1000) dist_str = g_strdup_printf("%u m", width_metric); else dist_str = g_strdup_printf("%u km", width_metric/1000); width_metric /= m_per_pix; /* and now the hard part: scale for useful imperial values :-( */ /* try to convert to feet, 1ft == 0.3048 m */ width /= 0.3048; float imp_scale = 0.3048; char *dist_imp_unit = "ft"; if(width >= 100) { /* 1yd == 3 feet */ width /= 3.0; imp_scale *= 3.0; dist_imp_unit = "yd"; if(width >= 1760.0) { /* 1mi == 1760 yd */ width /= 1760.0; imp_scale *= 1760.0; dist_imp_unit = "mi"; } } /* also convert this to full tens/hundreds */ exp = logf(width)*M_LOG10E; mant = width/pow(10,exp); int width_imp = mant * pow(10,exp); char *dist_str_imp = g_strdup_printf("%u %s", width_imp, dist_imp_unit); /* convert back to pixels */ width_imp *= imp_scale; width_imp /= m_per_pix; cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, OSD_SCALE_FONT_SIZE); cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); cairo_text_extents_t extents; cairo_text_extents (cr, dist_str, &extents); cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); cairo_set_line_width (cr, OSD_SCALE_FONT_SIZE/6); cairo_move_to (cr, 2*OSD_SCALE_FD, OSD_SCALE_H2-OSD_SCALE_FD); cairo_text_path (cr, dist_str); cairo_stroke (cr); cairo_move_to (cr, 2*OSD_SCALE_FD, OSD_SCALE_H2+OSD_SCALE_FD + extents.height); cairo_text_path (cr, dist_str_imp); cairo_stroke (cr); cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); cairo_move_to (cr, 2*OSD_SCALE_FD, OSD_SCALE_H2-OSD_SCALE_FD); cairo_show_text (cr, dist_str); cairo_move_to (cr, 2*OSD_SCALE_FD, OSD_SCALE_H2+OSD_SCALE_FD + extents.height); cairo_show_text (cr, dist_str_imp); g_free(dist_str); g_free(dist_str_imp); /* draw white line */ cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); cairo_set_line_width (cr, OSD_SCALE_FONT_SIZE/3); cairo_move_to (cr, OSD_SCALE_FONT_SIZE/6, OSD_SCALE_M); cairo_rel_line_to (cr, 0, OSD_SCALE_TICK); cairo_rel_line_to (cr, width_metric, 0); cairo_rel_line_to (cr, 0, -OSD_SCALE_TICK); cairo_stroke(cr); cairo_move_to (cr, OSD_SCALE_FONT_SIZE/6, OSD_SCALE_I); cairo_rel_line_to (cr, 0, -OSD_SCALE_TICK); cairo_rel_line_to (cr, width_imp, 0); cairo_rel_line_to (cr, 0, +OSD_SCALE_TICK); cairo_stroke(cr); /* draw black line */ cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 1.0); cairo_set_line_width (cr, OSD_SCALE_FONT_SIZE/6); cairo_move_to (cr, OSD_SCALE_FONT_SIZE/6, OSD_SCALE_M); cairo_rel_line_to (cr, 0, OSD_SCALE_TICK); cairo_rel_line_to (cr, width_metric, 0); cairo_rel_line_to (cr, 0, -OSD_SCALE_TICK); cairo_stroke(cr); cairo_move_to (cr, OSD_SCALE_FONT_SIZE/6, OSD_SCALE_I); cairo_rel_line_to (cr, 0, -OSD_SCALE_TICK); cairo_rel_line_to (cr, width_imp, 0); cairo_rel_line_to (cr, 0, +OSD_SCALE_TICK); cairo_stroke(cr); cairo_destroy(cr); } static void scale_draw(OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr) { OsmGpsMapOsdPrivate *priv = self->priv; OsdScale_t *scale = self->priv->scale; gint x, y; x = priv->osd_x; y = -priv->osd_y; if(x < 0) x += allocation->width - OSD_SCALE_W; if(y < 0) y += allocation->height - OSD_SCALE_H; cairo_set_source_surface(cr, scale->surface, x, y); cairo_paint(cr); } static void coordinates_render(OsmGpsMapOsd *self, OsmGpsMap *map) { OsdCoordinates_t *coordinates = self->priv->coordinates; if(!coordinates->surface) return; /* get current map position */ gfloat lat, lon; g_object_get(G_OBJECT(map), "latitude", &lat, "longitude", &lon, NULL); /* check if position has changed enough to require redraw */ if(!isnan(coordinates->lat) && !isnan(coordinates->lon)) /* 1/60000 == 1/1000 minute */ if((fabsf(lat - coordinates->lat) < 1/60000) && (fabsf(lon - coordinates->lon) < 1/60000)) return; coordinates->lat = lat; coordinates->lon = lon; /* first fill with transparency */ g_assert(coordinates->surface); cairo_t *cr = cairo_create(coordinates->surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); // cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 0.5); cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.0); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, OSD_COORDINATES_FONT_SIZE); char *latitude = osd_latitude_str(lat); char *longitude = osd_longitude_str(lon); int y = OSD_COORDINATES_OFFSET; y = osd_render_centered_text(cr, y, OSD_COORDINATES_W, OSD_COORDINATES_FONT_SIZE, latitude); y = osd_render_centered_text(cr, y, OSD_COORDINATES_W, OSD_COORDINATES_FONT_SIZE, longitude); g_free(latitude); g_free(longitude); cairo_destroy(cr); } static void coordinates_draw(OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr) { OsmGpsMapOsdPrivate *priv = self->priv; OsdCoordinates_t *coordinates = self->priv->coordinates; gint x,y; x = -priv->osd_x; y = -priv->osd_y; if(x < 0) x += allocation->width - OSD_COORDINATES_W; if(y < 0) y += allocation->height - OSD_COORDINATES_H; cairo_set_source_surface(cr, coordinates->surface, x, y); cairo_paint(cr); } static void crosshair_render(OsmGpsMapOsd *self, OsmGpsMap *map) { OsdCrosshair_t *crosshair = self->priv->crosshair; if(!crosshair->surface || crosshair->rendered) return; crosshair->rendered = TRUE; /* first fill with transparency */ g_assert(crosshair->surface); cairo_t *cr = cairo_create(crosshair->surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.0); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.5); cairo_set_line_width (cr, OSD_CROSSHAIR_RADIUS/2); osd_render_crosshair_shape(cr, OSD_CROSSHAIR_W, OSD_CROSSHAIR_H, OSD_CROSSHAIR_RADIUS, OSD_CROSSHAIR_TICK); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); cairo_set_line_width (cr, OSD_CROSSHAIR_RADIUS/4); osd_render_crosshair_shape(cr, OSD_CROSSHAIR_W, OSD_CROSSHAIR_H, OSD_CROSSHAIR_RADIUS, OSD_CROSSHAIR_TICK); cairo_destroy(cr); } static void crosshair_draw(OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr) { OsdCrosshair_t *crosshair = self->priv->crosshair; gint x,y; x = (allocation->width - OSD_CROSSHAIR_W)/2; y = (allocation->height - OSD_CROSSHAIR_H)/2; cairo_set_source_surface(cr, crosshair->surface, x, y); cairo_paint(cr); } static void controls_render(OsmGpsMapOsd *self, OsmGpsMap *map) { GdkRGBA fg, bg; OsmGpsMapOsdPrivate *priv = self->priv; OsdControls_t *controls = self->priv->controls; if(!controls->surface || controls->rendered) return; controls->rendered = TRUE; gdk_rgba_parse (&fg, "black"); gdk_rgba_parse (&bg, "grey80"); /* first fill with transparency */ g_assert(controls->surface); cairo_t *cr = cairo_create(controls->surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.0); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); gint x = 1; gint y = 1; /* --------- draw dpad ----------- */ if (priv->show_dpad) { gint gps_w = (priv->show_gps_in_dpad ? priv->dpad_radius/2 : 0); osd_render_dpad(cr, x, y, priv->dpad_radius, gps_w, priv->osd_shadow, &bg, &fg); if (priv->show_gps_in_dpad) { gint gps_x = x+priv->dpad_radius-(gps_w/2); gint gps_y = y+priv->dpad_radius-(gps_w/2); osd_render_gps(cr, gps_x, gps_y, gps_w, &bg, &fg); } y += (2*priv->dpad_radius); y += priv->osd_pad; } /* --------- draw zoom ----------- */ if (priv->show_zoom) { gint gps_w = (priv->show_gps_in_zoom ? priv->dpad_radius/2 : 0); osd_render_zoom(cr, x, y, priv->zoom_w, priv->zoom_h, gps_w, priv->osd_shadow, &bg, &fg); if (priv->show_gps_in_zoom) { gint gps_x = x+(priv->zoom_w/2); gint gps_y = y+(priv->zoom_h/2)-(gps_w/2); osd_render_gps(cr, gps_x, gps_y, gps_w, &bg, &fg); } y += priv->zoom_h; } } static void controls_draw(OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr) { OsmGpsMapOsdPrivate *priv = self->priv; OsdControls_t *controls = self->priv->controls; gint x,y; x = priv->osd_x; if(x < 0) x += allocation->width - priv->osd_w; y = priv->osd_y; if(y < 0) y += allocation->height - priv->osd_h; cairo_set_source_surface(cr, controls->surface, x, y); cairo_paint(cr); } static void copyright_render(OsmGpsMapOsd *self, OsmGpsMap *map) { OsdCopyright_t *copyright = self->priv->copyright; /* get current map source */ gint map_source; g_object_get(G_OBJECT(map), "map-source", &map_source, NULL); /* render only if the map source changed */ if(copyright->map_source == map_source) return; copyright->map_source = map_source; if(copyright->surface) g_free(copyright->surface); copyright->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, OSD_COPYRIGHT_W, OSD_COPYRIGHT_H); /* first fill with transparency */ g_assert(copyright->surface); cairo_t *cr = cairo_create(copyright->surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 0.0, 0.0, 0.0, 0.0); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, OSD_COPYRIGHT_FONT_SIZE); /* get the copyright and draw them */ char* text = (char *)osm_gps_map_source_get_copyright(map_source); if(text) osd_render_centered_text(cr, 0, OSD_COPYRIGHT_W, OSD_COPYRIGHT_FONT_SIZE, text); cairo_destroy(cr); } static void copyright_draw(OsmGpsMapOsd *self, GtkAllocation *allocation, cairo_t *cr) { OsmGpsMapOsdPrivate *priv = self->priv; OsdCopyright_t *copyright = self->priv->copyright; gint x,y; x = -priv->osd_x; y = -priv->osd_y; if(x < 0) x += (allocation->width - OSD_COPYRIGHT_W) / 2 + 20; if(y < 0) y += allocation->height - OSD_COPYRIGHT_H; cairo_set_source_surface(cr, copyright->surface, x, y); cairo_paint(cr); } osm-gps-map-1.2.2/src/osm-gps-map-osd.h000066400000000000000000000037601526276210300175510ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef __OSM_GPS_MAP_OSD_H__ #define __OSM_GPS_MAP_OSD_H__ #include G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP_OSD (osm_gps_map_osd_get_type()) #define OSM_GPS_MAP_OSD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP_OSD, OsmGpsMapOsd)) #define OSM_GPS_MAP_OSD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSM_TYPE_GPS_MAP_OSD, OsmGpsMapOsdClass)) #define OSM_GPS_MAP_IS_OSD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP_OSD)) #define OSM_GPS_MAP_IS_OSD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSM_TYPE_GPS_MAP_OSD)) #define OSM_GPS_MAP_OSD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSM_TYPE_GPS_MAP_OSD, OsmGpsMapOsdClass)) typedef struct _OsmGpsMapOsd OsmGpsMapOsd; typedef struct _OsmGpsMapOsdClass OsmGpsMapOsdClass; typedef struct _OsmGpsMapOsdPrivate OsmGpsMapOsdPrivate; struct _OsmGpsMapOsd { GObject parent; /*< private >*/ OsmGpsMapOsdPrivate *priv; }; struct _OsmGpsMapOsdClass { GObjectClass parent_class; /* vtable */ }; GType osm_gps_map_osd_get_type (void); OsmGpsMapOsd* osm_gps_map_osd_new (void); G_END_DECLS #endif /* __OSM_GPS_MAP_OSD_H__ */ osm-gps-map-1.2.2/src/osm-gps-map-point.c000066400000000000000000000140771526276210300201130ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:osm-gps-map-point * @short_description: A geographic location (latitude, longitude) * @stability: Stable * @include: osm-gps-map.h * * #OsmGpsMapPoint describes a geographic location (latitude, longitude). * Helper functions exist to create such a point from either radian co-ordinates * (osm_gps_map_point_new_radians()) or degrees (osm_gps_map_new_degrees()). **/ #include "converter.h" #include "osm-gps-map-point.h" GType osm_gps_map_point_get_type (void) { static GType our_type = 0; if (our_type == 0) our_type = g_boxed_type_register_static (g_intern_static_string ("OsmGpsMapPoint"), (GBoxedCopyFunc)osm_gps_map_point_copy, (GBoxedFreeFunc)osm_gps_map_point_free); return our_type; } /** * osm_gps_map_point_new_degrees: * @lat: (in): latitude in degrees * @lon: (in): longtitude in degrees * * Create point with specified params * * Returns: (transfer full): new point object * Since: 0.7.0 **/ OsmGpsMapPoint * osm_gps_map_point_new_degrees(float lat, float lon) { OsmGpsMapPoint *p = g_new0(OsmGpsMapPoint, 1); p->rlat = deg2rad(lat); p->rlon = deg2rad(lon); p->user_data = NULL; return p; } /** * osm_gps_map_point_new_radians: * @rlat: (in): latitude in radians * @rlon: (in): longtitude in radians * * Create point with specified params * * Returns: (transfer full): new point object * Since: 0.7.0 **/ OsmGpsMapPoint * osm_gps_map_point_new_radians(float rlat, float rlon) { OsmGpsMapPoint *p = g_new0(OsmGpsMapPoint, 1); p->rlat = rlat; p->rlon = rlon; p->user_data = NULL; return p; } /** * osm_gps_map_point_new_degrees_with_user_data: * @lat: (in): latitude in degrees * @lon: (in): longtitude in degrees * @user_data: (in): user data * * Create point with specified params * * Returns: (transfer full): new point object * Since: 1.2.0 **/ OsmGpsMapPoint * osm_gps_map_point_new_degrees_with_user_data(float lat, float lon, gpointer user_data) { OsmGpsMapPoint *p = g_new0(OsmGpsMapPoint, 1); p->rlat = deg2rad(lat); p->rlon = deg2rad(lon); p->user_data = user_data; return p; } /** * osm_gps_map_point_new_radians_with_user_data: * @rlat: (in): latitude in radians * @rlon: (in): longtitude in radians * @user_data: (in): user data * * Create point with specified params * * Returns: (transfer full): new point object * Since: 1.2.0 **/ OsmGpsMapPoint * osm_gps_map_point_new_radians_with_user_data(float rlat, float rlon, gpointer user_data) { OsmGpsMapPoint *p = g_new0(OsmGpsMapPoint, 1); p->rlat = rlat; p->rlon = rlon; p->user_data = user_data; return p; } /** * osm_gps_map_point_get_degrees: * @point: The point ( latitude and longitude in radian ) * @lat: (out): latitude in degrees * @lon: (out): longitude in degrees * * Returns the lagitude and longitude in degrees. * * Since: 0.7.0 **/ void osm_gps_map_point_get_degrees(OsmGpsMapPoint *point, float *lat, float *lon) { *lat = rad2deg(point->rlat); *lon = rad2deg(point->rlon); } /** * osm_gps_map_point_get_radians: * @point: The #OsmGpsMapPoint point ( latitude and longitude in radian ) * @rlat: (out): latitude in radians * @rlon: (out): longitude in radians * * Returns the lagitude and longitude in radians. * * Since: 0.7.0 **/ void osm_gps_map_point_get_radians(OsmGpsMapPoint *point, float *rlat, float *rlon) { *rlat = point->rlat; *rlon = point->rlon; } /** * osm_gps_map_point_set_degrees: * @point: The #OsmGpsMapPoint point ( latitude and longitude in radian ) * @lat: (in): latitude in degrees * @lon: (in): longitude in degrees * * Sets the lagitude and longitude in degrees. * * Since: 0.7.0 **/ void osm_gps_map_point_set_degrees(OsmGpsMapPoint *point, float lat, float lon) { point->rlat = deg2rad(lat); point->rlon = deg2rad(lon); } /** * osm_gps_map_point_set_radians: * @point: The #OsmGpsMapPoint point ( latitude and longitude in radian ) * @rlat: (in): latitude in radians * @rlon: (in): longitude in radians * * Sets the lagitude and longitude in radians. * * Since: 0.7.0 **/ void osm_gps_map_point_set_radians(OsmGpsMapPoint *point, float rlat, float rlon) { point->rlat = rlat; point->rlon = rlon; } /** * osm_gps_map_point_get_user_data: * @point: The #OsmGpsMapPoint point * * Get user data stored in point * * Returns: (transfer none): The #OsmGpsMapPoint user data * Since: 1.2.0 **/ gpointer osm_gps_map_point_get_user_data(OsmGpsMapPoint *point) { return point->user_data; } /** * osm_gps_map_point_set_user_data: * @point: The #OsmGpsMapPoint point * @user_data: (in): user data * * Store user data in point * * Since: 1.2.0 **/ void osm_gps_map_point_set_user_data(OsmGpsMapPoint *point, gpointer user_data) { point->user_data = user_data; } /** * osm_gps_map_point_copy: * @point: (in): a #OsmGpsMapPoint object * * Create a copy of a point * * Returns: (transfer full): Copied point * Since: 0.7.2 */ OsmGpsMapPoint * osm_gps_map_point_copy (const OsmGpsMapPoint *point) { OsmGpsMapPoint *result = g_new (OsmGpsMapPoint, 1); *result = *point; return result; } /** * osm_gps_map_point_free: * @point: a #OsmGpsMapPoint object * * Free point object * * Since: 0.7.2 */ void osm_gps_map_point_free (OsmGpsMapPoint *point) { g_free(point); } osm-gps-map-1.2.2/src/osm-gps-map-point.h000066400000000000000000000045211526276210300201110ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_POINT_H #define _OSM_GPS_MAP_POINT_H #include #include G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP_POINT osm_gps_map_point_get_type() typedef struct _OsmGpsMapPoint OsmGpsMapPoint; struct _OsmGpsMapPoint { /* radians */ float rlat; float rlon; gpointer user_data; }; GType osm_gps_map_point_get_type (void) G_GNUC_CONST; OsmGpsMapPoint * osm_gps_map_point_new_degrees (float lat, float lon); OsmGpsMapPoint * osm_gps_map_point_new_radians (float rlat, float rlon); OsmGpsMapPoint * osm_gps_map_point_new_degrees_with_user_data (float lat, float lon, gpointer user_data); OsmGpsMapPoint * osm_gps_map_point_new_radians_with_user_data (float rlat, float rlon, gpointer user_data); void osm_gps_map_point_get_degrees (OsmGpsMapPoint *point, float *lat, float *lon); void osm_gps_map_point_get_radians (OsmGpsMapPoint *point, float *rlat, float *rlon); void osm_gps_map_point_set_degrees (OsmGpsMapPoint *point, float lat, float lon); void osm_gps_map_point_set_radians (OsmGpsMapPoint *point, float rlat, float rlon); gpointer osm_gps_map_point_get_user_data (OsmGpsMapPoint *point); void osm_gps_map_point_set_user_data (OsmGpsMapPoint *point, gpointer user_data); void osm_gps_map_point_free (OsmGpsMapPoint *point); OsmGpsMapPoint * osm_gps_map_point_copy (const OsmGpsMapPoint *point); G_END_DECLS #endif /* _OSM_GPS_MAP_POINT_H */ osm-gps-map-1.2.2/src/osm-gps-map-polygon.c000066400000000000000000000172011526276210300204410ustar00rootroot00000000000000/* * Copyright (C) 2013 Samuel Cowen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include "converter.h" #include "osm-gps-map-polygon.h" enum { PROP_0, PROP_VISIBLE, PROP_TRACK, PROP_SHADED, PROP_EDITABLE, PROP_SHADE_ALPHA, PROP_BREAKABLE }; struct _OsmGpsMapPolygonPrivate { OsmGpsMapTrack* track; gboolean visible; gboolean editable; gboolean shaded; gfloat shade_alpha; gboolean breakable; }; G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMapPolygon, osm_gps_map_polygon, G_TYPE_OBJECT) #define DEFAULT_R (60000) #define DEFAULT_G (0) #define DEFAULT_B (0) #define DEFAULT_A (0.6) static void osm_gps_map_polygon_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsmGpsMapPolygonPrivate *priv = OSM_GPS_MAP_POLYGON(object)->priv; switch (property_id) { case PROP_VISIBLE: g_value_set_boolean(value, priv->visible); break; case PROP_TRACK: g_value_set_pointer(value, priv->track); break; case PROP_SHADED: g_value_set_boolean(value, priv->shaded); break; case PROP_EDITABLE: g_value_set_boolean(value, priv->editable); break; case PROP_SHADE_ALPHA: g_value_set_float(value, priv->shade_alpha); break; case PROP_BREAKABLE: g_value_set_boolean(value, priv->breakable); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_polygon_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsmGpsMapPolygonPrivate *priv = OSM_GPS_MAP_POLYGON(object)->priv; switch (property_id) { case PROP_VISIBLE: priv->visible = g_value_get_boolean (value); break; case PROP_TRACK: priv->track = g_value_get_pointer (value); break; case PROP_SHADED: priv->shaded = g_value_get_boolean(value); break; case PROP_EDITABLE: priv->editable = g_value_get_boolean(value); break; case PROP_SHADE_ALPHA: priv->shade_alpha = g_value_get_float(value); break; case PROP_BREAKABLE: priv->breakable = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_polygon_dispose (GObject *object) { g_return_if_fail (OSM_GPS_MAP_IS_POLYGON (object)); OsmGpsMapPolygon* poly = OSM_GPS_MAP_POLYGON(object); g_object_unref(poly->priv->track); G_OBJECT_CLASS (osm_gps_map_polygon_parent_class)->dispose (object); } static void osm_gps_map_polygon_finalize (GObject *object) { G_OBJECT_CLASS (osm_gps_map_polygon_parent_class)->finalize (object); } static void osm_gps_map_polygon_class_init (OsmGpsMapPolygonClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->get_property = osm_gps_map_polygon_get_property; object_class->set_property = osm_gps_map_polygon_set_property; object_class->dispose = osm_gps_map_polygon_dispose; object_class->finalize = osm_gps_map_polygon_finalize; g_object_class_install_property (object_class, PROP_VISIBLE, g_param_spec_boolean ("visible", "visible", "should this poly be visible", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_TRACK, g_param_spec_pointer ("track", "track", "list of points for the polygon", G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_EDITABLE, g_param_spec_boolean ("editable", "editable", "should this polygon be editable", FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_SHADED, g_param_spec_boolean ("shaded", "shaded", "should this polygon be shaded", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_SHADE_ALPHA, g_param_spec_float ("shade_alpha", "shade_alpha", "sets the translucency of the shaded area of a polygon", 0.0, 1.0, 0.5, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property(object_class, PROP_BREAKABLE, g_param_spec_boolean("breakable", "breakable", "can polygons have points inserted using breakers", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); } static void osm_gps_map_polygon_init (OsmGpsMapPolygon *self) { self->priv = osm_gps_map_polygon_get_instance_private(self); self->priv->track = osm_gps_map_track_new(); } OsmGpsMapTrack* osm_gps_map_polygon_get_track(OsmGpsMapPolygon* poly) { return poly->priv->track; } OsmGpsMapPolygon * osm_gps_map_polygon_new (void) { return g_object_new (OSM_TYPE_GPS_MAP_POLYGON, "track", osm_gps_map_track_new(), NULL); } #ifdef __cplusplus } #endif osm-gps-map-1.2.2/src/osm-gps-map-polygon.h000066400000000000000000000044331526276210300204510ustar00rootroot00000000000000/* * Copyright (C) 2013 Samuel Cowen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_POLYGON_H #define _OSM_GPS_MAP_POLYGON_H #include #include #include G_BEGIN_DECLS #include "osm-gps-map-track.h" #define OSM_TYPE_GPS_MAP_POLYGON osm_gps_map_polygon_get_type() #define OSM_GPS_MAP_POLYGON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP_POLYGON, OsmGpsMapPolygon)) #define OSM_GPS_MAP_POLYGON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSM_TYPE_GPS_MAP_POLYGON, OsmGpsMapPolygonClass)) #define OSM_GPS_MAP_IS_POLYGON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP_POLYGON)) #define OSM_GPS_MAP_IS_POLYGON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSM_TYPE_GPS_MAP_POLYGON)) #define OSM_GPS_MAP_POLYGON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSM_TYPE_GPS_MAP_POLYGON, OsmGpsMapPolygonClass)) typedef struct _OsmGpsMapPolygon OsmGpsMapPolygon; typedef struct _OsmGpsMapPolygonClass OsmGpsMapPolygonClass; typedef struct _OsmGpsMapPolygonPrivate OsmGpsMapPolygonPrivate; struct _OsmGpsMapPolygon { GObject parent; OsmGpsMapPolygonPrivate *priv; }; struct _OsmGpsMapPolygonClass { GObjectClass parent_class; }; GType osm_gps_map_polygon_get_type (void) G_GNUC_CONST; OsmGpsMapPolygon* osm_gps_map_polygon_new (void); /** * osm_gps_map_polygon_get_track: * @poly: a #OsmGpsMapPolygon * * Get track from the polygon * * Returns: (transfer none): The #OsmGpsMapTrack of the polygon **/ OsmGpsMapTrack* osm_gps_map_polygon_get_track(OsmGpsMapPolygon* poly); G_END_DECLS #endif /* _OSM_GPS_MAP_POLYGON_H */ osm-gps-map-1.2.2/src/osm-gps-map-source.c000066400000000000000000000207321526276210300202550ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include "private.h" #include "osm-gps-map-source.h" const char* osm_gps_map_source_get_friendly_name(OsmGpsMapSource_t source) { switch(source) { case OSM_GPS_MAP_SOURCE_NULL: return "None"; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: return "OpenStreetMap I"; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: return "OpenStreetMap II"; case OSM_GPS_MAP_SOURCE_OPENAERIALMAP: return "OpenAerialMap"; case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: return "OpenCycleMap"; case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: return "OpenTopoMap"; case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT: return "Public Transport"; case OSM_GPS_MAP_SOURCE_OSMC_TRAILS: return "OSMC Trails"; case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: return "Maps-For-Free"; case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: return "Google Maps"; case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: return "Google Satellite"; case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: return "Google Hybrid"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: return "Virtual Earth"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: return "Virtual Earth Satellite"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID: return "Virtual Earth Hybrid"; case OSM_GPS_MAP_SOURCE_LAST: default: return NULL; } return NULL; } const char* osm_gps_map_source_get_copyright(OsmGpsMapSource_t source) { switch(source) { case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: // https://www.openstreetmap.org/copyright return "© OpenStreetMap contributors"; case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: // http://www.thunderforest.com/terms/ return "Maps © thunderforest.com, Data © osm.org/copyright"; case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT: return "Maps © ÖPNVKarte, Data © OpenStreetMap contributors"; case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: return "Maps © Maps-For-Free"; case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: return "© OpenTopoMap (CC-BY-SA)"; case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: return "Map provided by Google"; case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: return "Map provided by Google "; case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: return "Map provided by Google"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: return "Map provided by Microsoft"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: return "Map provided by Microsoft"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID: return "Map provided by Microsoft"; default: return NULL; } return NULL; } //http://www.internettablettalk.com/forums/showthread.php?t=5209 //https://garage.maemo.org/plugins/scmsvn/viewcvs.php/trunk/src/maps.c?root=maemo-mapper&view=markup //http://www.ponies.me.uk/maps/GoogleTileUtils.java //http://www.mgmaps.com/cache/MapTileCacher.perl const char* osm_gps_map_source_get_repo_uri(OsmGpsMapSource_t source) { switch(source) { case OSM_GPS_MAP_SOURCE_NULL: return "none://"; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: return OSM_REPO_URI; case OSM_GPS_MAP_SOURCE_OPENAERIALMAP: /* OpenAerialMap is down, offline till furthur notice http://openaerialmap.org/pipermail/talk_openaerialmap.org/2008-December/000055.html */ return NULL; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: /* The Tile@Home serverhas been shut down. */ // return "http://tah.openstreetmap.org/Tiles/tile/#Z/#X/#Y.png"; return NULL; case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: // return "http://c.andy.sandbox.cloudmade.com/tiles/cycle/#Z/#X/#Y.png"; return "http://b.tile.opencyclemap.org/cycle/#Z/#X/#Y.png"; case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT: return "http://tile.xn--pnvkarte-m4a.de/tilegen/#Z/#X/#Y.png"; case OSM_GPS_MAP_SOURCE_OSMC_TRAILS: // Appears to be shut down return NULL; case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: return "https://maps-for-free.com/layer/relief/z#Z/row#Y/#Z_#X-#Y.jpg"; case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: return "https://a.tile.opentopomap.org/#Z/#X/#Y.png"; case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: return "http://mt#R.google.com/vt/lyrs=m&hl=en&x=#X&s=&y=#Y&z=#Z"; case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: return "http://mt#R.google.com/vt/lyrs=y&hl=en&x=#X&s=&y=#Y&z=#Z"; case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: return "http://mt#R.google.com/vt/lyrs=s&hl=en&x=#X&s=&y=#Y&z=#Z"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: return "http://a#R.ortho.tiles.virtualearth.net/tiles/r#W.jpeg?g=50"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: return "http://a#R.ortho.tiles.virtualearth.net/tiles/a#W.jpeg?g=50"; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID: return "http://a#R.ortho.tiles.virtualearth.net/tiles/h#W.jpeg?g=50"; case OSM_GPS_MAP_SOURCE_LAST: default: return NULL; } return NULL; } const char * osm_gps_map_source_get_image_format(OsmGpsMapSource_t source) { switch(source) { case OSM_GPS_MAP_SOURCE_NULL: case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT: case OSM_GPS_MAP_SOURCE_OSMC_TRAILS: case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: return "png"; case OSM_GPS_MAP_SOURCE_OPENAERIALMAP: case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID: case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: return "jpg"; case OSM_GPS_MAP_SOURCE_LAST: default: return "bin"; } return "bin"; } int osm_gps_map_source_get_min_zoom(OsmGpsMapSource_t source) { return 1; } int osm_gps_map_source_get_max_zoom(OsmGpsMapSource_t source) { switch(source) { case OSM_GPS_MAP_SOURCE_NULL: return 18; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: return 19; case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: return 18; case OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT: return OSM_MAX_ZOOM; case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: case OSM_GPS_MAP_SOURCE_OPENAERIALMAP: case OSM_GPS_MAP_SOURCE_OPENTOPOMAP: return 17; case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: return OSM_MAX_ZOOM; case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID: return 19; case OSM_GPS_MAP_SOURCE_OSMC_TRAILS: return 15; case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: return 11; case OSM_GPS_MAP_SOURCE_LAST: default: return 17; } return 17; } gboolean osm_gps_map_source_is_valid(OsmGpsMapSource_t source) { return osm_gps_map_source_get_repo_uri(source) != NULL; } osm-gps-map-1.2.2/src/osm-gps-map-source.h000066400000000000000000000070011526276210300202540ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_SOURCE_H_ #define _OSM_GPS_MAP_SOURCE_H_ #include G_BEGIN_DECLS typedef enum { OSM_GPS_MAP_SOURCE_NULL, OSM_GPS_MAP_SOURCE_OPENSTREETMAP, OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER, OSM_GPS_MAP_SOURCE_OPENAERIALMAP, OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE, OSM_GPS_MAP_SOURCE_OPENCYCLEMAP, OSM_GPS_MAP_SOURCE_OPENTOPOMAP, OSM_GPS_MAP_SOURCE_OSM_PUBLIC_TRANSPORT, OSM_GPS_MAP_SOURCE_GOOGLE_STREET, OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE, OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID, OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET, OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE, OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_HYBRID, OSM_GPS_MAP_SOURCE_OSMC_TRAILS, OSM_GPS_MAP_SOURCE_LAST } OsmGpsMapSource_t; /** * osm_gps_map_source_get_friendly_name: * @source: (in): a #OsmGpsMapSource_t source id * * Get friendly name for source * * Returns: Nice printable source name * Since: 0.7.0 **/ const char* osm_gps_map_source_get_friendly_name (OsmGpsMapSource_t source); /** * osm_gps_map_source_get_copyright: * @source: (in): a #OsmGpsMapSource_t source id * * Get copyright information for the source * * Returns: Source copyright information * Since: 1.2.0 **/ const char* osm_gps_map_source_get_copyright (OsmGpsMapSource_t source); /** * osm_gps_map_source_get_repo_uri: * @source: (in): a #OsmGpsMapSource_t source id * * Get repository URI address for the source * * Returns: Source repo URI * Since: 0.7.0 **/ const char* osm_gps_map_source_get_repo_uri (OsmGpsMapSource_t source); /** * osm_gps_map_source_get_image_format: * @source: (in): a #OsmGpsMapSource_t source id * * Get tile image format for the source * * Returns: source tile image format * Since: 0.7.0 **/ const char* osm_gps_map_source_get_image_format (OsmGpsMapSource_t source); /** * osm_gps_map_source_get_min_zoom: * @source: (in): a #OsmGpsMapSource_t source id * * Get minimum zoom level for the source * * Returns: source minimum zoom level * Since: 0.7.0 **/ int osm_gps_map_source_get_min_zoom (OsmGpsMapSource_t source); /** * osm_gps_map_source_get_max_zoom: * @source: (in): a #OsmGpsMapSource_t source id * * Get maximum zoom level for the source * * Returns: source maximum zoom level * Since: 0.7.0 **/ int osm_gps_map_source_get_max_zoom (OsmGpsMapSource_t source); /** * osm_gps_map_source_is_valid: * @source: (in): a #OsmGpsMapSource_t source id * * Check whether source is considered valid * * Returns: Validity of the source (whether repo uri is not null) * Since: 0.7.0 **/ gboolean osm_gps_map_source_is_valid (OsmGpsMapSource_t source); G_END_DECLS #endif /* _OSM_GPS_MAP_SOURCE_H_ */ osm-gps-map-1.2.2/src/osm-gps-map-track.c000066400000000000000000000320561526276210300200630ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:osm-gps-map-track * @short_description: A list of GPS points * @stability: Stable * @include: osm-gps-map.h * * #OsmGpsMapTrack stores multiple #OsmGpsMapPoint objects, i.e. a track, and * describes how such a track should be drawn on the map * (see osm_gps_map_track_add()), including its colour, width, etc. **/ #include #include #include "converter.h" #include "osm-gps-map-track.h" enum { PROP_0, PROP_VISIBLE, PROP_TRACK, PROP_LINE_WIDTH, PROP_ALPHA, PROP_COLOR, PROP_EDITABLE }; enum { POINT_ADDED, POINT_CHANGED, POINT_INSERTED, POINT_REMOVED, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0,}; struct _OsmGpsMapTrackPrivate { GSList *track; gboolean visible; gfloat linewidth; gfloat alpha; GdkRGBA color; gboolean editable; }; G_DEFINE_TYPE_WITH_PRIVATE(OsmGpsMapTrack, osm_gps_map_track, G_TYPE_OBJECT) #define DEFAULT_R (0.6) #define DEFAULT_G (0) #define DEFAULT_B (0) #define DEFAULT_A (0.6) static void osm_gps_map_track_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { OsmGpsMapTrackPrivate *priv = OSM_GPS_MAP_TRACK(object)->priv; switch (property_id) { case PROP_VISIBLE: g_value_set_boolean(value, priv->visible); break; case PROP_TRACK: g_value_set_pointer(value, priv->track); break; case PROP_LINE_WIDTH: g_value_set_float(value, priv->linewidth); break; case PROP_ALPHA: g_value_set_float(value, priv->alpha); break; case PROP_COLOR: g_value_set_boxed(value, &priv->color); break; case PROP_EDITABLE: g_value_set_boolean(value, priv->editable); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_track_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { OsmGpsMapTrackPrivate *priv = OSM_GPS_MAP_TRACK(object)->priv; switch (property_id) { case PROP_VISIBLE: priv->visible = g_value_get_boolean (value); break; case PROP_TRACK: priv->track = g_value_get_pointer (value); break; case PROP_LINE_WIDTH: priv->linewidth = g_value_get_float (value); break; case PROP_ALPHA: priv->alpha = g_value_get_float (value); break; case PROP_COLOR: { GdkRGBA *c = g_value_get_boxed (value); priv->color.red = c->red; priv->color.green = c->green; priv->color.blue = c->blue; } break; case PROP_EDITABLE: priv->editable = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void osm_gps_map_track_dispose (GObject *object) { g_return_if_fail (OSM_GPS_MAP_IS_TRACK (object)); OsmGpsMapTrackPrivate *priv = OSM_GPS_MAP_TRACK(object)->priv; if (priv->track) { g_slist_foreach(priv->track, (GFunc) g_free, NULL); g_slist_free(priv->track); priv->track = NULL; } G_OBJECT_CLASS (osm_gps_map_track_parent_class)->dispose (object); } static void osm_gps_map_track_finalize (GObject *object) { G_OBJECT_CLASS (osm_gps_map_track_parent_class)->finalize (object); } static void osm_gps_map_track_class_init (OsmGpsMapTrackClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->get_property = osm_gps_map_track_get_property; object_class->set_property = osm_gps_map_track_set_property; object_class->dispose = osm_gps_map_track_dispose; object_class->finalize = osm_gps_map_track_finalize; g_object_class_install_property (object_class, PROP_VISIBLE, g_param_spec_boolean ("visible", "visible", "should this track be visible", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_TRACK, g_param_spec_pointer ("track", "track", "list of points for the track", G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_LINE_WIDTH, g_param_spec_float ("line-width", "line-width", "width of the lines drawn for the track", 0.0, /* minimum property value */ 100.0, /* maximum property value */ 4.0, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_ALPHA, g_param_spec_float ("alpha", "alpha", "alpha transparency of the track", 0.0, /* minimum property value */ 1.0, /* maximum property value */ DEFAULT_A, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_COLOR, g_param_spec_boxed ("color", "color", "color of the track", GDK_TYPE_RGBA, G_PARAM_READABLE | G_PARAM_WRITABLE)); g_object_class_install_property (object_class, PROP_EDITABLE, g_param_spec_boolean ("editable", "editable", "should this track be editable", FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMapTrack::point-added: * @self: A #OsmGpsMapTrack * @arg1: The added #OsmGpsMapPoint * * The #OsmGpsMapTrack::point-added signal is emitted whenever a #OsmGpsMapPoint * is added to the #OsmGpsMapTrack. */ signals [POINT_ADDED] = g_signal_new ("point-added", OSM_TYPE_GPS_MAP_TRACK, G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, OSM_TYPE_GPS_MAP_POINT); signals [POINT_CHANGED] = g_signal_new ("point-changed", OSM_TYPE_GPS_MAP_TRACK, G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 1, G_TYPE_INT); signals [POINT_INSERTED] = g_signal_new ("point-inserted", OSM_TYPE_GPS_MAP_TRACK, G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); signals [POINT_REMOVED] = g_signal_new ("point-removed", OSM_TYPE_GPS_MAP_TRACK, G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); } static void osm_gps_map_track_init (OsmGpsMapTrack *self) { self->priv = osm_gps_map_track_get_instance_private(self); self->priv->color.red = DEFAULT_R; self->priv->color.green = DEFAULT_G; self->priv->color.blue = DEFAULT_B; } void osm_gps_map_track_add_point (OsmGpsMapTrack *track, const OsmGpsMapPoint *point) { g_return_if_fail (OSM_GPS_MAP_IS_TRACK (track)); OsmGpsMapTrackPrivate *priv = track->priv; OsmGpsMapPoint *p = g_boxed_copy (OSM_TYPE_GPS_MAP_POINT, point); priv->track = g_slist_append (priv->track, p); g_signal_emit (track, signals[POINT_ADDED], 0, p); } void osm_gps_map_track_remove_point(OsmGpsMapTrack* track, int pos) { OsmGpsMapTrackPrivate *priv = track->priv; gpointer pgl = g_slist_nth_data(priv->track, pos); priv->track = g_slist_remove(priv->track, pgl); g_signal_emit(track, signals[POINT_REMOVED], 0, pos); } int osm_gps_map_track_n_points(OsmGpsMapTrack* track) { return g_slist_length(track->priv->track); } void osm_gps_map_track_insert_point (OsmGpsMapTrack* track, OsmGpsMapPoint* np, int pos) { // TODO: const OsmGpsMapPoint * like add_point (1.3) g_return_if_fail (OSM_GPS_MAP_IS_TRACK (track)); OsmGpsMapTrackPrivate *priv = track->priv; OsmGpsMapPoint *p = g_boxed_copy (OSM_TYPE_GPS_MAP_POINT, np); priv->track = g_slist_insert (priv->track, p, pos); g_signal_emit (track, signals[POINT_INSERTED], 0, pos); } OsmGpsMapPoint* osm_gps_map_track_get_point(OsmGpsMapTrack* track, int pos) { OsmGpsMapTrackPrivate* priv = track->priv; return g_slist_nth_data(priv->track, pos); } GSList * osm_gps_map_track_get_points (OsmGpsMapTrack *track) { g_return_val_if_fail (OSM_GPS_MAP_IS_TRACK (track), NULL); return track->priv->track; } void osm_gps_map_track_set_color (OsmGpsMapTrack *track, GdkRGBA *color) { g_return_if_fail (OSM_GPS_MAP_IS_TRACK (track)); track->priv->color.red = color->red; track->priv->color.green = color->green; track->priv->color.blue = color->blue; } void osm_gps_map_track_get_color (OsmGpsMapTrack *track, GdkRGBA *color) { g_return_if_fail (OSM_GPS_MAP_IS_TRACK (track)); color->red = track->priv->color.red; color->green = track->priv->color.green; color->blue = track->priv->color.blue; } double osm_gps_map_track_get_length(OsmGpsMapTrack* track) { GSList* points = track->priv->track; double ret = 0; OsmGpsMapPoint* point_a = NULL; OsmGpsMapPoint* point_b = NULL; while(points) { point_a = point_b; point_b = points->data; if(point_a) { ret += acos(sin(point_a->rlat)*sin(point_b->rlat) + cos(point_a->rlat)*cos(point_b->rlat)*cos(point_b->rlon-point_a->rlon)) * 6371109; //the mean raduis of earth } points = points->next; } return ret; } OsmGpsMapTrack * osm_gps_map_track_new (void) { return g_object_new (OSM_TYPE_GPS_MAP_TRACK, NULL); } osm-gps-map-1.2.2/src/osm-gps-map-track.h000066400000000000000000000113541526276210300200660ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_TRACK_H #define _OSM_GPS_MAP_TRACK_H #include #include #include #include "osm-gps-map-point.h" G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP_TRACK osm_gps_map_track_get_type() #define OSM_GPS_MAP_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP_TRACK, OsmGpsMapTrack)) #define OSM_GPS_MAP_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSM_TYPE_GPS_MAP_TRACK, OsmGpsMapTrackClass)) #define OSM_GPS_MAP_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP_TRACK)) #define OSM_GPS_MAP_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSM_TYPE_GPS_MAP_TRACK)) #define OSM_GPS_MAP_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSM_TYPE_GPS_MAP_TRACK, OsmGpsMapTrackClass)) typedef struct _OsmGpsMapTrack OsmGpsMapTrack; typedef struct _OsmGpsMapTrackClass OsmGpsMapTrackClass; typedef struct _OsmGpsMapTrackPrivate OsmGpsMapTrackPrivate; struct _OsmGpsMapTrack { GObject parent; OsmGpsMapTrackPrivate *priv; }; struct _OsmGpsMapTrackClass { GObjectClass parent_class; }; /** * osm_gps_map_track_get_type: * * Get track type * * Return value: (element-type GType): The type of the track * Since: 0.7.0 **/ GType osm_gps_map_track_get_type (void) G_GNUC_CONST; /** * osm_gps_map_track_new: * * Create new track * * Returns: (transfer full): New track * Since: 0.7.0 **/ OsmGpsMapTrack * osm_gps_map_track_new (void); /** * osm_gps_map_track_add_point: * @track: (in): a #OsmGpsMapTrack * @point: (in): a #OsmGpsMapPoint point to add * * Add a point to track * * Since: 0.7.0 **/ void osm_gps_map_track_add_point (OsmGpsMapTrack *track, const OsmGpsMapPoint *point); /** * osm_gps_map_track_get_points: * @track: (in): a #OsmGpsMapTrack * * Get list of points in the track * * Returns: (element-type OsmGpsMapPoint) (transfer none): list of #OsmGpsMapPoint * Since: 0.7.0 **/ GSList * osm_gps_map_track_get_points (OsmGpsMapTrack *track); /** * osm_gps_map_track_set_color: * @track: (in): a #OsmGpsMapTrack * @color: (in): new track color * * Set track color * * Since: 1.1.0 **/ void osm_gps_map_track_set_color (OsmGpsMapTrack *track, GdkRGBA *color); /** * osm_gps_map_track_get_color: * @track: (in): a #OsmGpsMapTrack * @color: (out caller-allocates): track color * * Get track color * * Since: 0.7.0 **/ void osm_gps_map_track_get_color (OsmGpsMapTrack *track, GdkRGBA *color); /** * osm_gps_map_track_remove_point: * @track: (in): a #OsmGpsMapTrack * @pos: Position of the point to remove * * Remove track point at @pos position in point list * * Since: 1.1.0 **/ void osm_gps_map_track_remove_point(OsmGpsMapTrack* track, int pos); /** * osm_gps_map_track_n_points: * @track: a #OsmGpsMapTrack * * Get number of points in the track * * Returns: the number of points in the track. * Since: 1.1.0 **/ int osm_gps_map_track_n_points(OsmGpsMapTrack* track); /** * osm_gps_map_track_insert_point: * @track: a #OsmGpsMapTrack * @np: a #OsmGpsMapPoint * @pos: Position for the point * * Instert point @np at given postition @pos * * Since: 1.1.0 **/ void osm_gps_map_track_insert_point(OsmGpsMapTrack* track, OsmGpsMapPoint* np, int pos); /** * osm_gps_map_track_get_point: * @track: a #OsmGpsMapTrack * @pos: Position of the point to get * * Get a #OsmGpsMapPoint point at @pos of given track * * Returns: (transfer none): a #OsmGpsMapPoint * Since: 1.1.0 **/ OsmGpsMapPoint* osm_gps_map_track_get_point(OsmGpsMapTrack* track, int pos); /** * osm_gps_map_track_get_length: * @track: (in): a #OsmGpsMapTrack * * Get track length in meters * * Returns: the length of the track in meters. * Since: 1.1.0 **/ double osm_gps_map_track_get_length(OsmGpsMapTrack* track); G_END_DECLS #endif /* _OSM_GPS_MAP_TRACK_H */ osm-gps-map-1.2.2/src/osm-gps-map-widget.c000066400000000000000000003736621526276210300202550ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * Copyright (C) Marcus Bauer 2008 * Copyright (C) John Stowers 2009 * Copyright (C) Till Harbaum 2009 * * Contributions by * Everaldo Canuto 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /** * SECTION:osm-gps-map * @short_description: The map display widget * @stability: Stable * @include: osm-gps-map.h * * #OsmGpsMap is a widget for displaying a map, optionally overlaid with a * track(s) of GPS co-ordinates, images, points of interest or on screen display * controls. #OsmGpsMap downloads (and caches for offline use) map data from a * number of websites, including * OpenStreetMap * * * Showing a map * * int main (int argc, char **argv) * { * g_thread_init(NULL); * gtk_init (&argc, &argv); * * GtkWidget *map = osm_gps_map_new (); * GtkWidget *w = gtk_window_new (GTK_WINDOW_TOPLEVEL); * gtk_container_add (GTK_CONTAINER(w), map); * gtk_widget_show_all (w); * * gtk_main (); * return 0; * } * * * * #OsmGpsMap allows great flexibility in customizing how the map tiles are * cached, see #OsmGpsMap:tile-cache-base and #OsmGpsMap:tile-cache for more * information. * * A number of different map sources are supported, see #OsmGpsMapSource_t. The * default source, %OSM_GPS_MAP_SOURCE_OPENSTREETMAP always works. Other sources, * particular those from proprietary providers may work occasionally, and then * cease to work. To check if a source is supported for the given version of * this library, call osm_gps_map_source_is_valid(). * * * Map with custom source and cache dir * * int main (int argc, char **argv) * { * g_thread_init(NULL); * gtk_init (&argc, &argv); * OsmGpsMapSource_t source = OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE; * * if ( !osm_gps_map_source_is_valid(source) ) * return 1; * * GtkWidget *map = g_object_new (OSM_TYPE_GPS_MAP, * "map-source", source, * "tile-cache", "/tmp/", * NULL); * GtkWidget *w = gtk_window_new (GTK_WINDOW_TOPLEVEL); * gtk_container_add (GTK_CONTAINER(w), map); * gtk_widget_show_all (w); * * gtk_main (); * return 0; * } * * * * Finally, if you wish to use a custom map source not supported by #OsmGpsMap, * such as a custom map created with * CloudMade * then you can also pass a specially formatted string to #OsmGpsMap:repo-uri. * * * Map using custom CloudMade map and on screen display * * int main (int argc, char **argv) * { * g_thread_init(NULL); * gtk_init (&argc, &argv); * const gchar *cloudmate = "http://a.tile.cloudmade.com/YOUR_API_KEY/1/256/#Z/#X/#Y.png"; * * GtkWidget *map = g_object_new (OSM_TYPE_GPS_MAP, * "repo-uri", cloudmate, * NULL); * OsmGpsMapOsd *osd = osm_gps_map_osd_new (); * GtkWidget *w = gtk_window_new (GTK_WINDOW_TOPLEVEL); * osm_gps_map_layer_add (OSM_GPS_MAP(map), OSM_GPS_MAP_LAYER(osd)); * gtk_container_add (GTK_CONTAINER(w), map); * gtk_widget_show_all (w); * * gtk_main (); * return 0; * } * * **/ #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include "converter.h" #include "private.h" #include "osm-gps-map-source.h" #include "osm-gps-map-widget.h" #include "osm-gps-map-compat.h" #define ENABLE_DEBUG (0) #define EXTRA_BORDER (0) #define OSM_GPS_MAP_SCROLL_STEP (10) #define USER_AGENT "libosmgpsmap/" VERSION #define DOWNLOAD_RETRIES 3 #define MAX_DOWNLOAD_TILES 10000 #define DOT_RADIUS 4.0 struct _OsmGpsMapPrivate { GHashTable *tile_queue; GHashTable *missing_tiles; GHashTable *tile_cache; int map_zoom; int max_zoom; int min_zoom; int tile_zoom_offset; int map_x; int map_y; /* Controls auto centering the map when a new GPS position arrives */ gfloat map_auto_center_threshold; /* Latitude and longitude of the center of the map, in radians */ gfloat center_rlat; gfloat center_rlon; guint max_tile_cache_size; /* Incremented at each redraw */ guint redraw_cycle; /* ID of the idle redraw operation */ guint idle_map_redraw; //how we download tiles SoupSession *soup_session; char *proxy_uri; char *user_agent; //where downloaded tiles are cached char *tile_dir; char *tile_base_dir; char *cache_dir; //contains flags indicating the various special characters //the uri string contains, that will be replaced when calculating //the uri to download. OsmGpsMapSource_t map_source; char *repo_uri; char *image_format; int uri_format; //gps tracking state GSList *trip_history; float gps_heading; OsmGpsMapPoint *gps; OsmGpsMapTrack *gps_track; gboolean gps_track_used; //additional images or tracks added to the map GSList *tracks; GSList *images; GSList *polygons; //Used for storing the joined tiles cairo_surface_t *pixmap; //The tile painted when one cannot be found GdkPixbuf *null_tile; //A list of OsmGpsMapLayer* layers, such as the OSD GSList *layers; //For tracking click and drag int drag_counter; int drag_mouse_dx; int drag_mouse_dy; int drag_start_mouse_x; int drag_start_mouse_y; int drag_start_map_x; int drag_start_map_y; int drag_limit; guint drag_expose_source; /* Properties for dragging a point with right mouse button. */ OsmGpsMapPoint* drag_point; OsmGpsMapTrack* drag_track; /* for customizing the redering of the gps track */ int ui_gps_point_inner_radius; int ui_gps_point_outer_radius; /* For storing keybindings */ guint keybindings[OSM_GPS_MAP_KEY_MAX]; /* flags controlling which features are enabled */ guint keybindings_enabled : 1; guint map_auto_download_enabled : 1; guint map_auto_center_enabled : 1; guint trip_history_record_enabled : 1; guint trip_history_show_enabled : 1; guint gps_point_enabled : 1; /* state flags */ guint is_disposed : 1; guint is_constructed : 1; guint is_dragging : 1; guint is_button_down : 1; guint is_fullscreen : 1; guint is_google : 1; guint is_dragging_point : 1; }; typedef struct { GdkPixbuf *pixbuf; /* We keep track of the number of the redraw cycle this tile was last used, * so that osm_gps_map_purge_cache() can remove the older ones */ guint redraw_cycle; } OsmCachedTile; typedef struct { /* The details of the tile to download */ char *uri; char *folder; char *filename; OsmGpsMap *map; /* whether to redraw the map when the tile arrives */ gboolean redraw; int ttl; } OsmTileDownload; enum { PROP_0, PROP_AUTO_CENTER, PROP_RECORD_TRIP_HISTORY, PROP_SHOW_TRIP_HISTORY, PROP_AUTO_DOWNLOAD, PROP_REPO_URI, PROP_PROXY_URI, PROP_USER_AGENT, PROP_TILE_CACHE_DIR, PROP_TILE_CACHE_BASE_DIR, PROP_TILE_ZOOM_OFFSET, PROP_ZOOM, PROP_MAX_ZOOM, PROP_MIN_ZOOM, PROP_LATITUDE, PROP_LONGITUDE, PROP_MAP_X, PROP_MAP_Y, PROP_TILES_QUEUED, PROP_GPS_TRACK_WIDTH, PROP_GPS_POINT_R1, PROP_GPS_POINT_R2, PROP_MAP_SOURCE, PROP_IMAGE_FORMAT, PROP_DRAG_LIMIT, PROP_AUTO_CENTER_THRESHOLD, PROP_SHOW_GPS_POINT }; G_DEFINE_TYPE_WITH_PRIVATE (OsmGpsMap, osm_gps_map, GTK_TYPE_DRAWING_AREA); /* * Drawing function forward defintions */ static gchar *replace_string(const gchar *src, const gchar *from, const gchar *to); static gchar *replace_map_uri(OsmGpsMap *map, const gchar *uri, int zoom, int x, int y); static void osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data); static void osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redraw); static GdkPixbuf* osm_gps_map_render_tile_upscaled (OsmGpsMap *map, GdkPixbuf *tile, int tile_zoom, int zoom, int x, int y); static void cached_tile_free (OsmCachedTile *tile) { g_object_unref (tile->pixbuf); g_slice_free (OsmCachedTile, tile); } static gboolean unref_in_idle (gpointer data) { g_object_unref (data); return FALSE; } /* * Description: * Find and replace text within a string. * * Parameters: * src (in) - pointer to source string * from (in) - pointer to search text * to (in) - pointer to replacement text * * Returns: * Returns a pointer to dynamically-allocated memory containing string * with occurences of the text pointed to by 'from' replaced by with the * text pointed to by 'to'. */ static gchar * replace_string(const gchar *src, const gchar *from, const gchar *to) { size_t size = strlen(src) + 1; size_t fromlen = strlen(from); size_t tolen = strlen(to); /* Allocate the first chunk with enough for the original string. */ gchar *value = g_malloc(size); /* We need to return 'value', so let's make a copy to mess around with. */ gchar *dst = value; if ( value != NULL ) { for ( ;; ) { /* Try to find the search text. */ const gchar *match = g_strstr_len(src, size, from); if ( match != NULL ) { gchar *temp; /* Find out how many characters to copy up to the 'match'. */ size_t count = match - src; /* Calculate the total size the string will be after the * replacement is performed. */ size += tolen - fromlen; temp = g_realloc(value, size); if ( temp == NULL ) { g_free(value); return NULL; } /* we'll want to return 'value' eventually, so let's point it * to the memory that we are now working with. * And let's not forget to point to the right location in * the destination as well. */ dst = temp + (dst - value); value = temp; /* * Copy from the source to the point where we matched. Then * move the source pointer ahead by the amount we copied. And * move the destination pointer ahead by the same amount. */ memmove(dst, src, count); src += count; dst += count; /* Now copy in the replacement text 'to' at the position of * the match. Adjust the source pointer by the text we replaced. * Adjust the destination pointer by the amount of replacement * text. */ memmove(dst, to, tolen); src += fromlen; dst += tolen; } else { /* * Copy any remaining part of the string. This includes the null * termination character. */ strcpy(dst, src); break; } } } return value; } static void map_convert_coords_to_quadtree_string(OsmGpsMap *map, gint x, gint y, gint zoomlevel, gchar *buffer, const gchar initial, const gchar *const quadrant) { gchar *ptr = buffer; gint n; if (initial) *ptr++ = initial; for(n = zoomlevel-1; n >= 0; n--) { gint xbit = (x >> n) & 1; gint ybit = (y >> n) & 1; *ptr++ = quadrant[xbit + 2 * ybit]; } *ptr++ = '\0'; } static void inspect_map_uri(OsmGpsMapPrivate *priv) { priv->uri_format = 0; priv->is_google = FALSE; if (g_strrstr(priv->repo_uri, URI_MARKER_X)) priv->uri_format |= URI_HAS_X; if (g_strrstr(priv->repo_uri, URI_MARKER_Y)) priv->uri_format |= URI_HAS_Y; if (g_strrstr(priv->repo_uri, URI_MARKER_Z)) priv->uri_format |= URI_HAS_Z; if (g_strrstr(priv->repo_uri, URI_MARKER_S)) priv->uri_format |= URI_HAS_S; if (g_strrstr(priv->repo_uri, URI_MARKER_Q)) priv->uri_format |= URI_HAS_Q; if (g_strrstr(priv->repo_uri, URI_MARKER_Q0)) priv->uri_format |= URI_HAS_Q0; if (g_strrstr(priv->repo_uri, URI_MARKER_YS)) priv->uri_format |= URI_HAS_YS; if (g_strrstr(priv->repo_uri, URI_MARKER_R)) priv->uri_format |= URI_HAS_R; if (g_strrstr(priv->repo_uri, "google.com")) priv->is_google = TRUE; g_debug("URI Format: 0x%X (google: %X)", priv->uri_format, priv->is_google); } static gchar * replace_map_uri(OsmGpsMap *map, const gchar *uri, int zoom, int x, int y) { OsmGpsMapPrivate *priv = map->priv; char *url; unsigned int i; char location[22]; i = 1; url = g_strdup(uri); while (i < URI_FLAG_END) { char s[16]; char *old; old = url; switch(i & priv->uri_format) { case URI_HAS_X: g_snprintf(s, sizeof(s), "%d", x); url = replace_string(url, URI_MARKER_X, s); break; case URI_HAS_Y: g_snprintf(s, sizeof(s), "%d", y); url = replace_string(url, URI_MARKER_Y, s); break; case URI_HAS_Z: g_snprintf(s, sizeof(s), "%d", zoom); url = replace_string(url, URI_MARKER_Z, s); break; case URI_HAS_S: g_snprintf(s, sizeof(s), "%d", priv->max_zoom-zoom); url = replace_string(url, URI_MARKER_S, s); break; case URI_HAS_Q: map_convert_coords_to_quadtree_string(map,x,y,zoom,location,'t',"qrts"); url = replace_string(url, URI_MARKER_Q, location); break; case URI_HAS_Q0: map_convert_coords_to_quadtree_string(map,x,y,zoom,location,'\0', "0123"); url = replace_string(url, URI_MARKER_Q0, location); //g_debug("FOUND " URI_MARKER_Q0); break; case URI_HAS_YS: // g_snprintf(s, sizeof(s), "%d", y); // url = replace_string(url, URI_MARKER_YS, s); g_warning("FOUND " URI_MARKER_YS " NOT IMPLEMENTED"); // retval = g_strdup_printf(repo->url, // tilex, // (1 << (MAX_ZOOM - zoom)) - tiley - 1, // zoom - (MAX_ZOOM - 17)); break; case URI_HAS_R: g_snprintf(s, sizeof(s), "%d", g_random_int_range(0,4)); url = replace_string(url, URI_MARKER_R, s); break; default: break; } if (old != url) { g_free(old); } i = (i << 1); } return url; } static void my_log_handler (const gchar * log_domain, GLogLevelFlags log_level, const gchar * message, gpointer user_data) { if (!(log_level & G_LOG_LEVEL_DEBUG) || ENABLE_DEBUG) g_log_default_handler (log_domain, log_level, message, user_data); } static float osm_gps_map_get_scale_at_point(int zoom, float rlat, float rlon) { /* world at zoom 1 == 512 pixels */ return cos(rlat) * M_PI * OSM_EQ_RADIUS / (1<<(7+zoom)); } static GSList * gslist_remove_one_gobject(GSList **list, GObject *gobj) { GSList *data = g_slist_find(*list, gobj); if (data) { g_object_unref(gobj); *list = g_slist_delete_link(*list, data); } return data; } static void gslist_of_gobjects_free(GSList **list) { if (list) { g_slist_foreach(*list, (GFunc) g_object_unref, NULL); g_slist_free(*list); *list = NULL; } } static void gslist_of_data_free (GSList **list) { if (list) { g_slist_foreach(*list, (GFunc) g_free, NULL); g_slist_free(*list); *list = NULL; } } static void draw_white_rectangle(cairo_t *cr, double x, double y, double width, double height) { cairo_save (cr); cairo_set_source_rgb (cr, 1, 1, 1); cairo_rectangle (cr, x, y, width, height); cairo_fill (cr); cairo_restore (cr); } static void osm_gps_map_print_images (OsmGpsMap *map, cairo_t *cr) { GSList *list; int min_x = 0,min_y = 0,max_x = 0,max_y = 0; int map_x0, map_y0; OsmGpsMapPrivate *priv = map->priv; map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; for(list = priv->images; list != NULL; list = list->next) { GdkRectangle loc; OsmGpsMapImage *im = OSM_GPS_MAP_IMAGE(list->data); const OsmGpsMapPoint *pt = osm_gps_map_image_get_point(im); /* pixel_x,y, offsets */ loc.x = lon2pixel(priv->map_zoom, pt->rlon) - map_x0; loc.y = lat2pixel(priv->map_zoom, pt->rlat) - map_y0; osm_gps_map_image_draw ( im, cr, &loc); max_x = MAX(loc.x + loc.width, max_x); min_x = MIN(loc.x - loc.width, min_x); max_y = MAX(loc.y + loc.height, max_y); min_y = MIN(loc.y - loc.height, min_y); } gtk_widget_queue_draw_area ( GTK_WIDGET(map), min_x + EXTRA_BORDER, min_y + EXTRA_BORDER, max_x + EXTRA_BORDER, max_y + EXTRA_BORDER); } static void osm_gps_map_draw_gps_point (OsmGpsMap *map, cairo_t *cr) { OsmGpsMapPrivate *priv = map->priv; int map_x0, map_y0; int x, y; int r, r2, mr; r = priv->ui_gps_point_inner_radius; r2 = priv->ui_gps_point_outer_radius; mr = MAX(3*r,r2); map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; x = lon2pixel(priv->map_zoom, priv->gps->rlon) - map_x0; y = lat2pixel(priv->map_zoom, priv->gps->rlat) - map_y0; /* draw transparent area */ if (r2 > 0) { cairo_set_line_width (cr, 1.5); cairo_set_source_rgba (cr, 0.75, 0.75, 0.75, 0.4); cairo_arc (cr, x, y, r2, 0, 2 * M_PI); cairo_fill (cr); /* draw transparent area border */ cairo_set_source_rgba (cr, 0.55, 0.55, 0.55, 0.4); cairo_arc (cr, x, y, r2, 0, 2 * M_PI); cairo_stroke(cr); } /* draw ball gradient */ if (r > 0) { cairo_pattern_t *pat; /* draw direction arrow */ if(!isnan(priv->gps_heading)) { cairo_move_to (cr, x-r*cos(priv->gps_heading), y-r*sin(priv->gps_heading)); cairo_line_to (cr, x+3*r*sin(priv->gps_heading), y-3*r*cos(priv->gps_heading)); cairo_line_to (cr, x+r*cos(priv->gps_heading), y+r*sin(priv->gps_heading)); cairo_close_path (cr); cairo_set_source_rgba (cr, 0.3, 0.3, 1.0, 0.5); cairo_fill_preserve (cr); cairo_set_line_width (cr, 1.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); cairo_stroke(cr); } pat = cairo_pattern_create_radial (x-(r/5), y-(r/5), (r/5), x, y, r); cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1.0); cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 1, 1.0); cairo_set_source (cr, pat); cairo_arc (cr, x, y, r, 0, 2 * M_PI); cairo_fill (cr); cairo_pattern_destroy (pat); /* draw ball border */ cairo_set_line_width (cr, 1.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_arc (cr, x, y, r, 0, 2 * M_PI); cairo_stroke(cr); } gtk_widget_queue_draw_area (GTK_WIDGET(map), x-mr, y-mr, mr*2, mr*2); } static void osm_gps_map_blit_tile(OsmGpsMap *map, GdkPixbuf *pixbuf, cairo_t *cr, int offset_x, int offset_y, int tile_zoom, int target_x, int target_y) { OsmGpsMapPrivate *priv = map->priv; int target_zoom = priv->map_zoom; if (tile_zoom == target_zoom) { g_debug("Blit @ %d,%d", offset_x,offset_y); /* draw pixbuf */ gdk_cairo_set_source_pixbuf (cr, pixbuf, offset_x, offset_y); cairo_paint (cr); } else { /* get an upscaled version of the pixbuf */ GdkPixbuf *pixmap_scaled = osm_gps_map_render_tile_upscaled ( map, pixbuf, tile_zoom, target_zoom, target_x, target_y); osm_gps_map_blit_tile (map, pixmap_scaled, cr, offset_x, offset_y, target_zoom, target_x, target_y); g_object_unref (pixmap_scaled); } } #define MSG_RESPONSE_LEN_FORMAT "%"G_GOFFSET_FORMAT static void osm_gps_map_tile_download_complete (SoupSession *session, GAsyncResult *result, gpointer user_data) { FILE *file; OsmTileDownload *dl = (OsmTileDownload *)user_data; OsmGpsMap *map = OSM_GPS_MAP(dl->map); OsmGpsMapPrivate *priv = map->priv; gboolean file_saved = FALSE; GError *error = NULL; SoupMessage *msg = soup_session_get_async_result_message(session, result); SoupStatus soup_status = msg ? soup_message_get_status(msg) : 0; GBytes *body = soup_session_send_and_read_finish (session, result, &error); if (!priv->is_disposed && body && SOUP_STATUS_IS_SUCCESSFUL (soup_status)) { /* save tile into cachedir if one has been specified */ if (priv->cache_dir) { if (g_mkdir_with_parents(dl->folder,0700) == 0) { file = g_fopen(dl->filename, "wb"); if (file != NULL) { fwrite (g_bytes_get_data(body, NULL), 1, g_bytes_get_size(body), file); file_saved = TRUE; g_debug("Wrote "MSG_RESPONSE_LEN_FORMAT" bytes to %s", g_bytes_get_size(body), dl->filename); fclose (file); } } else { g_warning("Error creating tile download directory: %s", dl->folder); } } if (dl->redraw) { GdkPixbuf *pixbuf = NULL; /* if the file was actually stored on disk, we can simply */ /* load and decode it from that file */ if (priv->cache_dir) { if (file_saved) { pixbuf = gdk_pixbuf_new_from_file (dl->filename, NULL); } } else { GdkPixbufLoader *loader; char *extension = strrchr (dl->filename, '.'); /* parse file directly from memory */ if (extension) { loader = gdk_pixbuf_loader_new_with_type (extension+1, NULL); if (!gdk_pixbuf_loader_write (loader, (unsigned char*)g_bytes_get_data(body, NULL), g_bytes_get_size(body), NULL)) { g_warning("Error: Decoding of image failed"); } gdk_pixbuf_loader_close(loader, NULL); pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); /* give up loader but keep the pixbuf */ g_object_ref(pixbuf); g_object_unref(loader); } else { g_warning("Error: Unable to determine image file format"); } } /* Store the tile into the cache */ if (G_LIKELY (pixbuf)) { OsmCachedTile *tile = g_slice_new (OsmCachedTile); tile->pixbuf = pixbuf; tile->redraw_cycle = priv->redraw_cycle; /* if the tile is already in the cache (it could be one * rendered from another zoom level), it will be * overwritten */ g_hash_table_insert (priv->tile_cache, dl->filename, tile); /* NULL-ify dl->filename so that it won't be freed, as * we are using it as a key in the hash table */ dl->filename = NULL; } osm_gps_map_map_redraw_idle (map); } g_hash_table_remove(priv->tile_queue, dl->uri); g_object_notify(G_OBJECT(map), "tiles-queued"); } else if (!priv->is_disposed) { if ((soup_status == SOUP_STATUS_NOT_FOUND) || (soup_status == SOUP_STATUS_FORBIDDEN)) { g_hash_table_insert(priv->missing_tiles, dl->uri, NULL); g_hash_table_remove(priv->tile_queue, dl->uri); g_object_notify(G_OBJECT(map), "tiles-queued"); } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { /* called as application exit or after osm_gps_map_download_cancel_all */ g_hash_table_remove(priv->tile_queue, dl->uri); g_object_notify(G_OBJECT(map), "tiles-queued"); } else { g_warning("Error downloading tile: %d - %s", soup_status, soup_status_get_phrase(soup_status)); //dl->ttl--; //if (dl->ttl) { // soup_session_requeue_message(session, msg); // return; //} g_hash_table_remove(priv->tile_queue, dl->uri); g_object_notify(G_OBJECT(map), "tiles-queued"); } } if (body) g_bytes_unref (body); g_clear_error (&error); g_free(dl->folder); g_free(dl->filename); g_free(dl); /* Drop the download ref after this Soup callback returns. Unref from * here disposes the session on the callback stack. */ g_idle_add (unref_in_idle, map); } static void osm_gps_map_download_tile (OsmGpsMap *map, int zoom, int x, int y, gboolean redraw) { SoupMessage *msg; OsmGpsMapPrivate *priv = map->priv; OsmTileDownload *dl = g_new0(OsmTileDownload,1); // set retries dl->ttl = DOWNLOAD_RETRIES; //calculate the uri to download dl->uri = replace_map_uri(map, priv->repo_uri, zoom, x, y); //check the tile has not already been queued for download, //or has been attempted, and its missing if (g_hash_table_lookup_extended(priv->tile_queue, dl->uri, NULL, NULL) || g_hash_table_lookup_extended(priv->missing_tiles, dl->uri, NULL, NULL) ) { g_debug("Tile already downloading (or missing)"); g_free(dl->uri); g_free(dl); } else { dl->folder = g_strdup_printf("%s%c%d%c%d%c", priv->cache_dir, G_DIR_SEPARATOR, zoom, G_DIR_SEPARATOR, x, G_DIR_SEPARATOR); dl->filename = g_strdup_printf("%s%d.%s", dl->folder, y, priv->image_format); dl->map = map; dl->redraw = redraw; g_debug("Download tile: %d,%d z:%d\n\t%s --> %s", x, y, zoom, dl->uri, dl->filename); msg = soup_message_new (SOUP_METHOD_GET, dl->uri); if (msg) { if (priv->is_google) { //Set maps.google.com as the referrer g_debug("Setting Google Referrer"); soup_message_headers_append(soup_message_get_request_headers(msg), "Referer", "http://maps.google.com/"); //For google satelite also set the appropriate cookie value if (priv->uri_format & URI_HAS_Q) { const char *cookie = g_getenv("GOOGLE_COOKIE"); if (cookie) { g_debug("Adding Google Cookie"); soup_message_headers_append(soup_message_get_request_headers(msg), "Cookie", cookie); } } } GCancellable *cancellable = g_cancellable_new (); g_hash_table_insert (priv->tile_queue, dl->uri, cancellable); dl->map = g_object_ref (map); /* the soup session unrefs the message when the download finishes */ soup_session_send_and_read_async(priv->soup_session, msg, G_PRIORITY_DEFAULT, cancellable, (GAsyncReadyCallback)osm_gps_map_tile_download_complete, dl); g_object_notify (G_OBJECT (map), "tiles-queued"); } else { g_warning("Could not create soup message"); g_free(dl->uri); g_free(dl->folder); g_free(dl->filename); g_free(dl); } } } static GdkPixbuf * osm_gps_map_load_cached_tile (OsmGpsMap *map, int zoom, int x, int y) { OsmGpsMapPrivate *priv = map->priv; gchar *filename; GdkPixbuf *pixbuf = NULL; OsmCachedTile *tile; filename = g_strdup_printf("%s%c%d%c%d%c%d.%s", priv->cache_dir, G_DIR_SEPARATOR, zoom, G_DIR_SEPARATOR, x, G_DIR_SEPARATOR, y, priv->image_format); tile = g_hash_table_lookup (priv->tile_cache, filename); if (tile) { g_free (filename); } else { pixbuf = gdk_pixbuf_new_from_file (filename, NULL); if (pixbuf) { tile = g_slice_new (OsmCachedTile); tile->pixbuf = pixbuf; g_hash_table_insert (priv->tile_cache, filename, tile); } else { g_free (filename); } } /* set/update the redraw_cycle timestamp on the tile */ if (tile) { tile->redraw_cycle = priv->redraw_cycle; pixbuf = g_object_ref (tile->pixbuf); } return pixbuf; } static GdkPixbuf * osm_gps_map_find_bigger_tile (OsmGpsMap *map, int zoom, int x, int y, int *zoom_found) { GdkPixbuf *pixbuf; int next_zoom, next_x, next_y; if (zoom == 0) return NULL; next_zoom = zoom - 1; next_x = x / 2; next_y = y / 2; pixbuf = osm_gps_map_load_cached_tile (map, next_zoom, next_x, next_y); if (pixbuf) *zoom_found = next_zoom; else pixbuf = osm_gps_map_find_bigger_tile (map, next_zoom, next_x, next_y, zoom_found); return pixbuf; } static GdkPixbuf * osm_gps_map_render_missing_tile_upscaled (OsmGpsMap *map, int zoom, int x, int y) { GdkPixbuf *pixbuf, *big; int zoom_big; big = osm_gps_map_find_bigger_tile (map, zoom, x, y, &zoom_big); if (!big) return NULL; g_debug ("Found bigger tile (zoom = %d, wanted = %d)", zoom_big, zoom); pixbuf = osm_gps_map_render_tile_upscaled (map, big, zoom_big, zoom, x, y); g_object_unref (big); return pixbuf; } static GdkPixbuf* osm_gps_map_render_tile_upscaled (OsmGpsMap *map, GdkPixbuf *big, int zoom_big, int zoom, int x, int y) { GdkPixbuf *pixbuf, *area; int area_size, area_x, area_y; int modulo; int zoom_diff; /* get a Pixbuf for the area to magnify */ zoom_diff = zoom - zoom_big; g_debug ("Upscaling by %d levels into tile %d,%d", zoom_diff, x, y); area_size = TILESIZE >> zoom_diff; modulo = 1 << zoom_diff; area_x = (x % modulo) * area_size; area_y = (y % modulo) * area_size; area = gdk_pixbuf_new_subpixbuf (big, area_x, area_y, area_size, area_size); pixbuf = gdk_pixbuf_scale_simple (area, TILESIZE, TILESIZE, GDK_INTERP_NEAREST); g_object_unref (area); return pixbuf; } static GdkPixbuf * osm_gps_map_render_missing_tile (OsmGpsMap *map, int zoom, int x, int y) { /* maybe TODO: render from downscaled tiles, if the following fails */ return osm_gps_map_render_missing_tile_upscaled (map, zoom, x, y); } static void osm_gps_map_load_tile (OsmGpsMap *map, cairo_t *cr, int zoom, int x, int y, int offset_x, int offset_y) { OsmGpsMapPrivate *priv = map->priv; gchar *filename; GdkPixbuf *pixbuf; int zoom_offset = priv->tile_zoom_offset; int target_x, target_y; g_debug("Load virtual tile %d,%d (%d,%d) z:%d", x, y, offset_x, offset_y, zoom); if (zoom > MIN_ZOOM) { zoom -= zoom_offset; x >>= zoom_offset; y >>= zoom_offset; } target_x = x; target_y = y; g_debug("Load actual tile %d,%d (%d,%d) z:%d", x, y, offset_x, offset_y, zoom); if (priv->map_source == OSM_GPS_MAP_SOURCE_NULL && priv->repo_uri == NULL) { osm_gps_map_blit_tile(map, priv->null_tile, cr, offset_x, offset_y, priv->map_zoom, target_x, target_y); return; } filename = g_strdup_printf("%s%c%d%c%d%c%d.%s", priv->cache_dir, G_DIR_SEPARATOR, zoom, G_DIR_SEPARATOR, x, G_DIR_SEPARATOR, y, priv->image_format); /* try to get file from internal cache first */ if(!(pixbuf = osm_gps_map_load_cached_tile(map, zoom, x, y))) pixbuf = gdk_pixbuf_new_from_file (filename, NULL); if(pixbuf) { g_debug("Found tile %s", filename); osm_gps_map_blit_tile(map, pixbuf, cr, offset_x, offset_y, zoom, target_x, target_y); g_object_unref (pixbuf); } else { if (priv->map_auto_download_enabled) { osm_gps_map_download_tile(map, zoom, x, y, TRUE); } /* try to render the tile by scaling cached tiles from other zoom * levels */ pixbuf = osm_gps_map_render_missing_tile (map, zoom, x, y); if (pixbuf) { osm_gps_map_blit_tile(map, pixbuf, cr, offset_x, offset_y, zoom, target_x, target_y); g_object_unref (pixbuf); } else { /* prevent some artifacts when drawing not yet loaded areas. */ g_warning ("Error getting missing tile"); /* FIXME: is this a warning? */ draw_white_rectangle (cr, offset_x, offset_y, TILESIZE, TILESIZE); } } g_free(filename); } static void osm_gps_map_fill_tiles_pixel (OsmGpsMap *map, cairo_t *cr) { OsmGpsMapPrivate *priv = map->priv; GtkAllocation allocation; int i,j, tile_x0, tile_y0, tiles_nx, tiles_ny; int offset_xn = 0; int offset_yn = 0; int offset_x; int offset_y; g_debug("Fill tiles: %d,%d z:%d", priv->map_x, priv->map_y, priv->map_zoom); gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); /* C / truncates toward 0; tile index must floor so negative map_x/map_y * stay aligned with overlays. Integer math keeps zoom 17-19 exact. */ tile_x0 = priv->map_x / TILESIZE; tile_y0 = priv->map_y / TILESIZE; if (priv->map_x < 0 && (priv->map_x % TILESIZE) != 0) tile_x0--; if (priv->map_y < 0 && (priv->map_y % TILESIZE) != 0) tile_y0--; offset_x = tile_x0 * TILESIZE - priv->map_x; offset_y = tile_y0 * TILESIZE - priv->map_y; offset_xn = offset_x + EXTRA_BORDER; offset_yn = offset_y + EXTRA_BORDER; tiles_nx = (allocation.width - offset_x) / TILESIZE + 1; tiles_ny = (allocation.height - offset_y) / TILESIZE + 1; for (i=tile_x0; i<(tile_x0+tiles_nx);i++) { for (j=tile_y0; j<(tile_y0+tiles_ny); j++) { if( j<0 || i<0 || i>=exp(priv->map_zoom * M_LN2) || j>=exp(priv->map_zoom * M_LN2)) { /* draw white in areas outside map (i.e. when zoomed right out) */ draw_white_rectangle (cr, offset_xn, offset_yn, TILESIZE, TILESIZE); } else { osm_gps_map_load_tile(map, cr, priv->map_zoom, i,j, offset_xn - EXTRA_BORDER,offset_yn - EXTRA_BORDER); } offset_yn += TILESIZE; } offset_xn += TILESIZE; offset_yn = offset_y + EXTRA_BORDER; } } static void osm_gps_map_print_track (OsmGpsMap *map, OsmGpsMapTrack *track, cairo_t *cr) { OsmGpsMapPrivate *priv = map->priv; GSList *pt,*points; int x,y; int min_x = 0,min_y = 0,max_x = 0,max_y = 0; gfloat lw, alpha; int map_x0, map_y0; GdkRGBA color; g_object_get (track, "track", &points, "line-width", &lw, "alpha", &alpha, NULL); osm_gps_map_track_get_color(track, &color); if (points == NULL) return; gboolean path_editable = FALSE; g_object_get(track, "editable", &path_editable, NULL); cairo_set_line_width (cr, lw); cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha); cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; int last_x = 0, last_y = 0; int x_pi = lon2pixel(priv->map_zoom, M_PI) - map_x0; int x_minus_pi = lon2pixel(priv->map_zoom, - M_PI) - map_x0; int double_pi = x_pi - x_minus_pi; float last_lon; for(pt = points; pt != NULL; pt = pt->next) { OsmGpsMapPoint *tp = pt->data; x = lon2pixel(priv->map_zoom, tp->rlon) - map_x0; y = lat2pixel(priv->map_zoom, tp->rlat) - map_y0; /* first time through loop */ if (pt == points) { cairo_move_to(cr, x, y); } else if (fabs(tp->rlon - last_lon) > M_PI && x != last_x) { /* instead of drawing to (x, y), draw a first segment to the date change line, and a second segment from the other date change line to (x, y) */ int interm_y; if (last_lon > 0) { /* tp->rlon is < 0 */ interm_y = (int)(last_y + (float)(y - last_y) / (float)((x + double_pi) - last_x) * (float)(x_pi - last_x)); cairo_line_to(cr, x_pi, interm_y); cairo_stroke(cr); cairo_move_to(cr, x_minus_pi, interm_y); } else { /* tp->rlon is > 0 */ interm_y = (int)(last_y + (float)(y - last_y) / (float)((x - double_pi) - last_x) * (float)(x_minus_pi - last_x)); cairo_line_to(cr, x_minus_pi, interm_y); cairo_stroke(cr); cairo_move_to(cr, x_pi, interm_y); } max_x = x_pi; min_x = x_minus_pi; } cairo_line_to(cr, x, y); cairo_stroke(cr); if(path_editable) { cairo_arc (cr, x, y, DOT_RADIUS, 0.0, 2 * M_PI); cairo_stroke(cr); if(pt != points) { cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha*0.75); cairo_arc(cr, (last_x + x)/2.0, (last_y+y)/2.0, DOT_RADIUS, 0.0, 2*M_PI); cairo_stroke(cr); cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha); } } cairo_move_to(cr, x, y); max_x = MAX(x,max_x); min_x = MIN(x,min_x); max_y = MAX(y,max_y); min_y = MIN(y,min_y); last_x = x; last_y = y; last_lon = tp->rlon; } gtk_widget_queue_draw_area ( GTK_WIDGET(map), min_x - lw, min_y - lw, max_x + (lw * 2), max_y + (lw * 2)); cairo_stroke(cr); } /* Prints the gps trip history, and any other tracks */ static void osm_gps_map_print_tracks (OsmGpsMap *map, cairo_t *cr) { GSList *tmp; OsmGpsMapPrivate *priv = map->priv; if (priv->trip_history_show_enabled) { osm_gps_map_print_track (map, priv->gps_track, cr); } if (priv->tracks) { tmp = priv->tracks; while (tmp != NULL) { osm_gps_map_print_track (map, OSM_GPS_MAP_TRACK(tmp->data), cr); tmp = g_slist_next(tmp); } } } static void osm_gps_map_print_polygon (OsmGpsMap *map, OsmGpsMapPolygon *poly, cairo_t *cr) { OsmGpsMapPrivate *priv = map->priv; GSList *pt,*points; int x,y; int min_x = 0,min_y = 0,max_x = 0,max_y = 0; gfloat lw, alpha; int map_x0, map_y0; GdkRGBA color; gfloat shade_alpha; OsmGpsMapTrack* track = osm_gps_map_polygon_get_track(poly); if(!track) return; g_object_get (track, "track", &points, "line-width", &lw, "alpha", &alpha, NULL); osm_gps_map_track_get_color(track, &color); if (points == NULL) return; gboolean path_editable = FALSE; gboolean poly_shaded = FALSE; gboolean breakable = TRUE; g_object_get(poly, "editable", &path_editable, NULL); g_object_get(poly, "shaded", &poly_shaded, NULL); g_object_get(poly, "shade_alpha", &shade_alpha, NULL); g_object_get(poly, "breakable", &breakable, NULL); cairo_set_line_width (cr, lw); cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha); cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; int first_x = 0, first_y = 0; for(pt = points; pt != NULL; pt = pt->next) { OsmGpsMapPoint *tp = pt->data; x = lon2pixel(priv->map_zoom, tp->rlon) - map_x0; y = lat2pixel(priv->map_zoom, tp->rlat) - map_y0; /* first time through loop */ if (pt == points) { cairo_move_to(cr, x, y); first_x = x; first_y = y; } cairo_line_to(cr, x, y); } //close off polygon cairo_line_to(cr, first_x, first_y); cairo_stroke(cr); if(path_editable) { int last_x = 0, last_y = 0; for(pt = points; pt != NULL; pt = pt->next) { OsmGpsMapPoint *tp = pt->data; x = lon2pixel(priv->map_zoom, tp->rlon) - map_x0; y = lat2pixel(priv->map_zoom, tp->rlat) - map_y0; cairo_arc (cr, x, y, DOT_RADIUS, 0.0, 2 * M_PI); cairo_stroke(cr); if((pt != points) && (breakable)) { cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha*0.75); cairo_arc(cr, (last_x + x)/2.0, (last_y+y)/2.0, DOT_RADIUS, 0.0, 2*M_PI); cairo_stroke(cr); cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha); } last_x = x; last_y = y; } x = first_x; y = first_y; if(breakable) { cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha*0.75); cairo_arc(cr, (last_x + x)/2.0, (last_y+y)/2.0, DOT_RADIUS, 0.0, 2*M_PI); cairo_stroke(cr); } cairo_set_source_rgba (cr, color.red, color.green, color.blue, alpha); } if(poly_shaded) { cairo_set_source_rgba (cr, color.red, color.green, color.blue, shade_alpha); first_x = 0; first_y = 0; for(pt = points; pt != NULL; pt = pt->next) { OsmGpsMapPoint *tp = pt->data; x = lon2pixel(priv->map_zoom, tp->rlon) - map_x0; y = lat2pixel(priv->map_zoom, tp->rlat) - map_y0; /* first time through loop */ if (pt == points) { cairo_move_to(cr, x, y); first_x = x; first_y = y; } cairo_line_to(cr, x, y); } //close off polygon cairo_line_to(cr, first_x, first_y); cairo_fill(cr); } gtk_widget_queue_draw_area ( GTK_WIDGET(map), min_x - lw, min_y - lw, max_x + (lw * 2), max_y + (lw * 2)); } static void osm_gps_map_print_polygons (OsmGpsMap *map, cairo_t* cr) { GSList *tmp; OsmGpsMapPrivate *priv = map->priv; if (priv->polygons) { tmp = priv->polygons; while (tmp != NULL) { osm_gps_map_print_polygon (map, OSM_GPS_MAP_POLYGON(tmp->data), cr); tmp = g_slist_next(tmp); } } } static gboolean osm_gps_map_purge_cache_check(gpointer key, gpointer value, gpointer user) { return (((OsmCachedTile*)value)->redraw_cycle != ((OsmGpsMapPrivate*)user)->redraw_cycle); } static void osm_gps_map_purge_cache (OsmGpsMap *map) { OsmGpsMapPrivate *priv = map->priv; if (g_hash_table_size (priv->tile_cache) < priv->max_tile_cache_size) return; /* run through the cache, and remove the tiles which have not been used * during the last redraw operation */ g_hash_table_foreach_remove(priv->tile_cache, osm_gps_map_purge_cache_check, priv); } gboolean osm_gps_map_map_redraw (OsmGpsMap *map) { cairo_t *cr; int w, h; OsmGpsMapPrivate *priv = map->priv; GtkWidget *widget = GTK_WIDGET(map); priv->idle_map_redraw = 0; /* dont't redraw if we have not been shown yet */ if (!priv->pixmap) return FALSE; /* don't redraw the entire map while the OSD is doing */ /* some animation or the like. This is to keep the animation */ /* fluid */ if (priv->layers) { GSList *list; for(list = priv->layers; list != NULL; list = list->next) { OsmGpsMapLayer *layer = list->data; if (osm_gps_map_layer_busy(layer)) return FALSE; } } /* the motion_notify handler uses priv->surface to redraw the area; if we * change it while we are dragging, we will end up showing it in the wrong * place. This could be fixed by carefully recompute the coordinates, but * for now it's easier just to disable redrawing the map while dragging */ if (priv->is_dragging) return FALSE; /* paint to the backing surface */ cr = cairo_create (priv->pixmap); /* undo all offsets that may have happened when dragging */ priv->drag_mouse_dx = 0; priv->drag_mouse_dy = 0; priv->redraw_cycle++; /* clear white background */ w = gtk_widget_get_allocated_width (widget); h = gtk_widget_get_allocated_height (widget); draw_white_rectangle(cr, 0, 0, w + EXTRA_BORDER * 2, h + EXTRA_BORDER * 2); osm_gps_map_fill_tiles_pixel(map, cr); osm_gps_map_print_tracks(map, cr); osm_gps_map_print_polygons(map, cr); osm_gps_map_print_images(map, cr); /* draw the gps point using the appropriate virtual private method */ if (priv->gps_track_used && priv->gps_point_enabled) { OsmGpsMapClass *klass = OSM_GPS_MAP_GET_CLASS(map); if (klass->draw_gps_point) klass->draw_gps_point (map, cr); } if (priv->layers) { GSList *list; for(list = priv->layers; list != NULL; list = list->next) { OsmGpsMapLayer *layer = list->data; osm_gps_map_layer_render (layer, map); } } osm_gps_map_purge_cache(map); gtk_widget_queue_draw (GTK_WIDGET (map)); cairo_destroy (cr); return FALSE; } void osm_gps_map_map_redraw_idle (OsmGpsMap *map) { OsmGpsMapPrivate *priv = map->priv; if (priv->idle_map_redraw == 0) priv->idle_map_redraw = g_idle_add ((GSourceFunc)osm_gps_map_map_redraw, map); } /* call this to update center_rlat and center_rlon after * changin map_x or map_y */ static void center_coord_update(OsmGpsMap *map) { GtkWidget *widget = GTK_WIDGET(map); OsmGpsMapPrivate *priv = map->priv; GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); gint pixel_x = priv->map_x + allocation.width/2; gint pixel_y = priv->map_y + allocation.height/2; priv->center_rlon = pixel2lon(priv->map_zoom, pixel_x); priv->center_rlat = pixel2lat(priv->map_zoom, pixel_y); g_signal_emit_by_name(widget, "changed"); } /* Automatically center the map if the current point, i.e the most recent * gps point, approaches the edge, and map_auto_center is set. Does not * request the map be redrawn */ static void maybe_autocenter_map (OsmGpsMap *map) { OsmGpsMapPrivate *priv; GtkAllocation allocation; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); if(priv->map_auto_center_enabled) { int pixel_x = lon2pixel(priv->map_zoom, priv->gps->rlon); int pixel_y = lat2pixel(priv->map_zoom, priv->gps->rlat); int x = pixel_x - priv->map_x; int y = pixel_y - priv->map_y; int width = allocation.width; int height = allocation.height; if( x < (width/2 - width/8) || x > (width/2 + width/8) || y < (height/2 - height/8) || y > (height/2 + height/8)) { priv->map_x = pixel_x - allocation.width/2; priv->map_y = pixel_y - allocation.height/2; center_coord_update(map); } } } static gboolean on_window_key_press(GtkWidget *widget, GdkEventKey *event, OsmGpsMapPrivate *priv) { int i; int step; gboolean handled; GtkAllocation allocation; OsmGpsMap *map = OSM_GPS_MAP(widget); /* if no keybindings are set, let the app handle them... */ if (!priv->keybindings_enabled) return FALSE; handled = FALSE; gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); step = allocation.width/OSM_GPS_MAP_SCROLL_STEP; /* the map handles some keys on its own */ for (i = 0; i < OSM_GPS_MAP_KEY_MAX; i++) { /* not the key we have a binding for */ if (map->priv->keybindings[i] != event->keyval) continue; switch(i) { case OSM_GPS_MAP_KEY_FULLSCREEN: { GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(widget)); if(!priv->is_fullscreen) gtk_window_fullscreen(GTK_WINDOW(toplevel)); else gtk_window_unfullscreen(GTK_WINDOW(toplevel)); priv->is_fullscreen = !priv->is_fullscreen; handled = TRUE; } break; case OSM_GPS_MAP_KEY_ZOOMIN: osm_gps_map_zoom_in(map); handled = TRUE; break; case OSM_GPS_MAP_KEY_ZOOMOUT: osm_gps_map_zoom_out(map); handled = TRUE; break; case OSM_GPS_MAP_KEY_UP: priv->map_y -= step; center_coord_update(map); osm_gps_map_map_redraw_idle(map); handled = TRUE; break; case OSM_GPS_MAP_KEY_DOWN: priv->map_y += step; center_coord_update(map); osm_gps_map_map_redraw_idle(map); handled = TRUE; break; case OSM_GPS_MAP_KEY_LEFT: priv->map_x -= step; center_coord_update(map); osm_gps_map_map_redraw_idle(map); handled = TRUE; break; case OSM_GPS_MAP_KEY_RIGHT: priv->map_x += step; center_coord_update(map); osm_gps_map_map_redraw_idle(map); handled = TRUE; break; default: break; } } return handled; } static void on_gps_point_added (OsmGpsMapTrack *track, OsmGpsMapPoint *point, OsmGpsMap *map) { osm_gps_map_map_redraw_idle (map); maybe_autocenter_map (map); } static void on_track_changed (OsmGpsMapTrack *track, GParamSpec *pspec, OsmGpsMap *map) { osm_gps_map_map_redraw_idle (map); } static void osm_gps_map_init (OsmGpsMap *object) { int i; OsmGpsMapPrivate *priv; priv = osm_gps_map_get_instance_private (object); object->priv = priv; priv->pixmap = NULL; priv->trip_history = NULL; priv->gps = osm_gps_map_point_new_radians(0.0, 0.0); priv->gps_track_used = FALSE; priv->gps_heading = OSM_GPS_MAP_INVALID; priv->gps_track = osm_gps_map_track_new(); g_signal_connect(priv->gps_track, "point-added", G_CALLBACK(on_gps_point_added), object); g_signal_connect(priv->gps_track, "notify", G_CALLBACK(on_track_changed), object); priv->tracks = NULL; priv->images = NULL; priv->layers = NULL; priv->drag_counter = 0; priv->drag_mouse_dx = 0; priv->drag_mouse_dy = 0; priv->drag_start_mouse_x = 0; priv->drag_start_mouse_y = 0; priv->uri_format = 0; priv->is_google = FALSE; priv->map_source = 0; priv->keybindings_enabled = FALSE; for (i = 0; i < OSM_GPS_MAP_KEY_MAX; i++) priv->keybindings[i] = 0; /* set the user agent */ priv->soup_session = soup_session_new (); soup_session_set_user_agent (priv->soup_session, USER_AGENT); /* hash table maps tile download URIs to cancellables and owns both */ priv->tile_queue = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); //Some mapping providers (Google) have varying degrees of tiles at multiple //zoom levels priv->missing_tiles = g_hash_table_new (g_str_hash, g_str_equal); /* memory cache for most recently used tiles */ priv->tile_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)cached_tile_free); priv->max_tile_cache_size = 20; gtk_widget_add_events (GTK_WIDGET (object), GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); #ifdef HAVE_GDK_EVENT_GET_SCROLL_DELTAS gtk_widget_add_events (GTK_WIDGET (object), GDK_SMOOTH_SCROLL_MASK) #endif gtk_widget_set_can_focus (GTK_WIDGET (object), TRUE); g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, my_log_handler, NULL); /* setup signal handlers */ g_signal_connect(object, "key_press_event", G_CALLBACK(on_window_key_press), priv); } static char* osm_gps_map_get_cache_base_dir(OsmGpsMapPrivate *priv) { if (priv->tile_base_dir) return g_strdup(priv->tile_base_dir); return osm_gps_map_get_default_cache_directory(); } static void osm_gps_map_setup(OsmGpsMap *map) { const char *uri; OsmGpsMapPrivate *priv = map->priv; /* user can specify a map source ID, or a repo URI as the map source */ uri = osm_gps_map_source_get_repo_uri(OSM_GPS_MAP_SOURCE_NULL); if ( (priv->map_source == 0) || (strcmp(priv->repo_uri, uri) == 0) ) { g_debug("Using null source"); priv->map_source = OSM_GPS_MAP_SOURCE_NULL; priv->null_tile = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, 256, 256); gdk_pixbuf_fill(priv->null_tile, 0xcccccc00); } else if (priv->map_source >= 0) { /* check if the source given is valid */ uri = osm_gps_map_source_get_repo_uri(priv->map_source); if (uri) { g_debug("Setting map source from ID"); g_free(priv->repo_uri); priv->repo_uri = g_strdup(uri); g_free(priv->image_format); priv->image_format = g_strdup( osm_gps_map_source_get_image_format(priv->map_source)); priv->max_zoom = osm_gps_map_source_get_max_zoom(priv->map_source); priv->min_zoom = osm_gps_map_source_get_min_zoom(priv->map_source); } } /* parse the source uri */ inspect_map_uri(priv); /* setup the tile cache */ if ( g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_DISABLED) == 0 ) { g_free(priv->cache_dir); priv->cache_dir = NULL; } else if ( g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_AUTO) == 0 ) { char *base = osm_gps_map_get_cache_base_dir(priv); char *md5 = g_compute_checksum_for_string (G_CHECKSUM_MD5, priv->repo_uri, -1); g_free(priv->cache_dir); priv->cache_dir = g_strdup_printf("%s%c%s", base, G_DIR_SEPARATOR, md5); g_free(base); g_free(md5); } else if ( g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_FRIENDLY) == 0 ) { char *base = osm_gps_map_get_cache_base_dir(priv); const char *fname = osm_gps_map_source_get_friendly_name(priv->map_source); g_free(priv->cache_dir); priv->cache_dir = g_strdup_printf("%s%c%s", base, G_DIR_SEPARATOR, fname); g_free(base); } else { /* the simple case is handled in g_object_set(PROP_TILE_CACHE_DIR) */ } g_debug("Cache dir: %s", priv->cache_dir); /* check if we are being called for a second (or more) time in the lifetime of the object, and if so, do some extra cleanup */ if ( priv->is_constructed ) { g_debug("Setup called again in map lifetime"); /* flush the ram cache */ g_hash_table_remove_all(priv->tile_cache); /* adjust zoom if necessary */ if(priv->map_zoom > priv->max_zoom) osm_gps_map_set_zoom(map, priv->max_zoom); if(priv->map_zoom < priv->min_zoom) osm_gps_map_set_zoom(map, priv->min_zoom); osm_gps_map_map_redraw_idle(map); } } static GObject * osm_gps_map_constructor (GType gtype, guint n_properties, GObjectConstructParam *properties) { GObject *object; OsmGpsMap *map; /* always chain up to the parent constructor */ object = G_OBJECT_CLASS(osm_gps_map_parent_class)->constructor(gtype, n_properties, properties); map = OSM_GPS_MAP(object); osm_gps_map_setup(map); map->priv->is_constructed = TRUE; return object; } static void osm_gps_map_dispose (GObject *object) { OsmGpsMap *map = OSM_GPS_MAP(object); OsmGpsMapPrivate *priv = map->priv; if (priv->is_disposed) return; priv->is_disposed = TRUE; soup_session_abort(priv->soup_session); g_object_unref(priv->soup_session); g_object_unref(priv->gps_track); g_hash_table_destroy(priv->tile_queue); g_hash_table_destroy(priv->missing_tiles); g_hash_table_destroy(priv->tile_cache); /* images and layers contain GObjects which need unreffing, so free here */ gslist_of_gobjects_free(&priv->images); gslist_of_gobjects_free(&priv->layers); gslist_of_gobjects_free(&priv->tracks); if(priv->pixmap) cairo_surface_destroy (priv->pixmap); if (priv->null_tile) g_object_unref (priv->null_tile); if (priv->idle_map_redraw != 0) g_source_remove (priv->idle_map_redraw); if (priv->drag_expose_source != 0) g_source_remove (priv->drag_expose_source); g_free(priv->gps); G_OBJECT_CLASS (osm_gps_map_parent_class)->dispose (object); } static void osm_gps_map_finalize (GObject *object) { OsmGpsMap *map = OSM_GPS_MAP(object); OsmGpsMapPrivate *priv = map->priv; if (priv->tile_dir) g_free(priv->tile_dir); g_free(priv->tile_base_dir); if (priv->cache_dir) g_free(priv->cache_dir); g_free(priv->repo_uri); g_free(priv->proxy_uri); g_free(priv->user_agent); g_free(priv->image_format); /* trip and tracks contain simple non GObject types, so free them here */ gslist_of_data_free(&priv->trip_history); G_OBJECT_CLASS (osm_gps_map_parent_class)->finalize (object); } static void osm_gps_map_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (object)); OsmGpsMap *map = OSM_GPS_MAP(object); OsmGpsMapPrivate *priv = map->priv; switch (prop_id) { case PROP_AUTO_CENTER: priv->map_auto_center_enabled = g_value_get_boolean (value); break; case PROP_RECORD_TRIP_HISTORY: priv->trip_history_record_enabled = g_value_get_boolean (value); break; case PROP_SHOW_TRIP_HISTORY: priv->trip_history_show_enabled = g_value_get_boolean (value); break; case PROP_AUTO_DOWNLOAD: priv->map_auto_download_enabled = g_value_get_boolean (value); break; case PROP_REPO_URI: g_free(priv->repo_uri); priv->repo_uri = g_value_dup_string (value); break; case PROP_PROXY_URI: if ( g_value_get_string(value) ) { g_free(priv->proxy_uri); priv->proxy_uri = g_value_dup_string (value); g_debug("Setting proxy server: %s", priv->proxy_uri); GValue val = {0}; GUri* uri = g_uri_parse(priv->proxy_uri, SOUP_HTTP_URI_FLAGS, NULL); g_value_init(&val, G_TYPE_URI); g_value_take_boxed(&val, uri); g_object_set_property(G_OBJECT(priv->soup_session),"proxy-resolver",&val); } else { g_free(priv->proxy_uri); priv->proxy_uri = NULL; } break; case PROP_USER_AGENT: g_free(priv->user_agent); GValue full_user_agent = G_VALUE_INIT; g_value_init(&full_user_agent, G_TYPE_STRING); if ( g_value_get_string(value) ) { priv->user_agent = g_value_dup_string (value); g_value_set_string (&full_user_agent, g_strdup_printf("%s %s", USER_AGENT, g_value_get_string(value))); } else { priv->user_agent = NULL; g_value_set_string (&full_user_agent, USER_AGENT); } g_object_set_property(G_OBJECT(priv->soup_session),"user-agent", &full_user_agent); break; case PROP_TILE_CACHE_DIR: if ( g_value_get_string(value) ) { g_free(priv->tile_dir); priv->tile_dir = g_value_dup_string (value); if ((g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_DISABLED) == 0) || (g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_AUTO) == 0) || (g_strcmp0(priv->tile_dir, OSM_GPS_MAP_CACHE_FRIENDLY) == 0)) { /* this case is handled by osm_gps_map_setup */ } else { if (priv->cache_dir) g_free(priv->cache_dir); priv->cache_dir = g_strdup(priv->tile_dir); g_debug("Cache dir: %s", priv->cache_dir); } } else { if (priv->tile_dir) g_free(priv->tile_dir); priv->tile_dir = g_strdup(OSM_GPS_MAP_CACHE_DISABLED); } break; case PROP_TILE_CACHE_BASE_DIR: g_free(priv->tile_base_dir); priv->tile_base_dir = g_value_dup_string (value); break; case PROP_TILE_ZOOM_OFFSET: priv->tile_zoom_offset = g_value_get_int (value); break; case PROP_ZOOM: priv->map_zoom = g_value_get_int (value); break; case PROP_MAX_ZOOM: priv->max_zoom = g_value_get_int (value); break; case PROP_MIN_ZOOM: priv->min_zoom = g_value_get_int (value); break; case PROP_MAP_X: priv->map_x = g_value_get_int (value); center_coord_update(map); break; case PROP_MAP_Y: priv->map_y = g_value_get_int (value); center_coord_update(map); break; case PROP_GPS_TRACK_WIDTH: g_object_set (priv->gps_track, "line-width", g_value_get_float (value), NULL); break; case PROP_GPS_POINT_R1: priv->ui_gps_point_inner_radius = g_value_get_int (value); break; case PROP_GPS_POINT_R2: priv->ui_gps_point_outer_radius = g_value_get_int (value); break; case PROP_MAP_SOURCE: { gint old = priv->map_source; priv->map_source = g_value_get_int (value); if(old >= OSM_GPS_MAP_SOURCE_NULL && priv->map_source != old && priv->map_source >= OSM_GPS_MAP_SOURCE_NULL && priv->map_source <= OSM_GPS_MAP_SOURCE_LAST) { /* we now have to switch the entire map */ osm_gps_map_setup(map); } } break; case PROP_IMAGE_FORMAT: g_free(priv->image_format); priv->image_format = g_value_dup_string (value); break; case PROP_DRAG_LIMIT: priv->drag_limit = g_value_get_int (value); break; case PROP_AUTO_CENTER_THRESHOLD: priv->map_auto_center_threshold = g_value_get_float (value); break; case PROP_SHOW_GPS_POINT: priv->gps_point_enabled = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void osm_gps_map_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (object)); OsmGpsMap *map = OSM_GPS_MAP(object); OsmGpsMapPrivate *priv = map->priv; switch (prop_id) { case PROP_AUTO_CENTER: g_value_set_boolean(value, priv->map_auto_center_enabled); break; case PROP_RECORD_TRIP_HISTORY: g_value_set_boolean(value, priv->trip_history_record_enabled); break; case PROP_SHOW_TRIP_HISTORY: g_value_set_boolean(value, priv->trip_history_show_enabled); break; case PROP_AUTO_DOWNLOAD: g_value_set_boolean(value, priv->map_auto_download_enabled); break; case PROP_REPO_URI: g_value_set_string(value, priv->repo_uri); break; case PROP_PROXY_URI: g_value_set_string(value, priv->proxy_uri); break; case PROP_USER_AGENT: g_value_set_string(value, priv->user_agent); break; case PROP_TILE_CACHE_DIR: g_value_set_string(value, priv->cache_dir); break; case PROP_TILE_CACHE_BASE_DIR: g_value_set_string(value, priv->tile_base_dir); break; case PROP_TILE_ZOOM_OFFSET: g_value_set_int(value, priv->tile_zoom_offset); break; case PROP_ZOOM: g_value_set_int(value, priv->map_zoom); break; case PROP_MAX_ZOOM: g_value_set_int(value, priv->max_zoom); break; case PROP_MIN_ZOOM: g_value_set_int(value, priv->min_zoom); break; case PROP_LATITUDE: g_value_set_float(value, rad2deg(priv->center_rlat)); break; case PROP_LONGITUDE: g_value_set_float(value, rad2deg(priv->center_rlon)); break; case PROP_MAP_X: g_value_set_int(value, priv->map_x); break; case PROP_MAP_Y: g_value_set_int(value, priv->map_y); break; case PROP_TILES_QUEUED: g_value_set_int(value, g_hash_table_size(priv->tile_queue)); break; case PROP_GPS_TRACK_WIDTH: { gfloat f; g_object_get (priv->gps_track, "line-width", &f, NULL); g_value_set_float (value, f); } break; case PROP_GPS_POINT_R1: g_value_set_int(value, priv->ui_gps_point_inner_radius); break; case PROP_GPS_POINT_R2: g_value_set_int(value, priv->ui_gps_point_outer_radius); break; case PROP_MAP_SOURCE: g_value_set_int(value, priv->map_source); break; case PROP_IMAGE_FORMAT: g_value_set_string(value, priv->image_format); break; case PROP_DRAG_LIMIT: g_value_set_int(value, priv->drag_limit); break; case PROP_AUTO_CENTER_THRESHOLD: g_value_set_float(value, priv->map_auto_center_threshold); break; case PROP_SHOW_GPS_POINT: g_value_set_boolean(value, priv->gps_point_enabled); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static gboolean osm_gps_map_scroll_event (GtkWidget *widget, GdkEventScroll *event) { OsmGpsMap *map; OsmGpsMapPoint *pt; float lat, lon, c_lat, c_lon; map = OSM_GPS_MAP(widget); pt = osm_gps_map_point_new_degrees(0.0,0.0); /* arguably we could use get_event_location here, but I'm not convinced it is forward compatible to cast between GdkEventScroll and GtkEventButton */ osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, pt); osm_gps_map_point_get_degrees (pt, &lat, &lon); c_lat = rad2deg(map->priv->center_rlat); c_lon = rad2deg(map->priv->center_rlon); if ((event->direction == GDK_SCROLL_UP) && (map->priv->map_zoom < map->priv->max_zoom)) { lat = c_lat + ((lat - c_lat)/2.0); lon = c_lon + ((lon - c_lon)/2.0); osm_gps_map_set_center_and_zoom(map, lat, lon, map->priv->map_zoom+1); } else if ((event->direction == GDK_SCROLL_DOWN) && (map->priv->map_zoom > map->priv->min_zoom)) { lat = c_lat + ((c_lat - lat)*1.0); lon = c_lon + ((c_lon - lon)*1.0); osm_gps_map_set_center_and_zoom(map, lat, lon, map->priv->map_zoom-1); } osm_gps_map_point_free (pt); return FALSE; } static gboolean osm_gps_map_button_press (GtkWidget *widget, GdkEventButton *event) { OsmGpsMap *map = OSM_GPS_MAP(widget); OsmGpsMapPrivate *priv = map->priv; if (priv->layers) { GSList *list; for(list = priv->layers; list != NULL; list = list->next) { OsmGpsMapLayer *layer = list->data; if (osm_gps_map_layer_button_press(layer, map, event)) return FALSE; } } if(event->button == 1) { GSList* tracks = priv->tracks; while(tracks) { OsmGpsMapTrack* track = tracks->data; gboolean path_editable = FALSE; g_object_get(track, "editable", &path_editable, NULL); if(path_editable) { GSList* points = osm_gps_map_track_get_points(track); int ctr = 0; int last_x = 0; int last_y = 0; while(points) { //if the mouse has gone down on a point, start dragging it int cx, cy; OsmGpsMapPoint* point = (OsmGpsMapPoint*)points->data; osm_gps_map_convert_geographic_to_screen(map, point, &cx, &cy); float dist_sqrd = (event->x - cx) * (event->x-cx) + (event->y-cy) * (event->y-cy); if(dist_sqrd <= ((DOT_RADIUS + 1) * (DOT_RADIUS + 1))) { priv->is_button_down = TRUE; priv->drag_point = point; priv->drag_track = track; priv->is_dragging_point = TRUE; osm_gps_map_map_redraw(map); return FALSE; } //add a new point if a 'breaker' has been clicked if(ctr != 0) { int ptx = (last_x+cx)/2.0; int pty = (last_y+cy)/2.0; dist_sqrd = (event->x - ptx) * (event->x-ptx) + (event->y-pty) * (event->y-pty); if(dist_sqrd <= ((DOT_RADIUS + 1) * (DOT_RADIUS + 1))) { OsmGpsMapPoint newpoint; osm_gps_map_convert_screen_to_geographic(map, ptx, pty, &newpoint); osm_gps_map_track_insert_point(track, &newpoint, ctr); osm_gps_map_map_redraw(map); return FALSE; } } last_x = cx; last_y = cy; points = points->next; ctr++; } } tracks = tracks->next; } GSList* polys = priv->polygons; while(polys) { OsmGpsMapPolygon* poly = polys->data; gboolean path_editable = FALSE; gboolean breakable = TRUE; OsmGpsMapTrack* track = osm_gps_map_polygon_get_track(poly); g_object_get(poly, "editable", &path_editable, NULL); g_object_get(poly, "breakable", &breakable, NULL); if(path_editable) { GSList* points = osm_gps_map_track_get_points(track); int ctr = 0; int last_x = 0; int last_y = 0; int first_x = 0; int first_y = 0; while(points) { //if the mouse has gone down on a point, start dragging it int cx, cy; OsmGpsMapPoint* point = (OsmGpsMapPoint*)points->data; osm_gps_map_convert_geographic_to_screen(map, point, &cx, &cy); float dist_sqrd = (event->x - cx) * (event->x-cx) + (event->y-cy) * (event->y-cy); if(dist_sqrd <= ((DOT_RADIUS + 1) * (DOT_RADIUS + 1))) { priv->is_button_down = TRUE; priv->drag_point = point; priv->drag_track = track; priv->is_dragging_point = TRUE; osm_gps_map_map_redraw(map); return FALSE; } //add a new point if a 'breaker' has been clicked if((ctr != 0) && (breakable)) { int ptx = (last_x+cx)/2.0; int pty = (last_y+cy)/2.0; dist_sqrd = (event->x - ptx) * (event->x-ptx) + (event->y-pty) * (event->y-pty); if(dist_sqrd <= ((DOT_RADIUS + 1) * (DOT_RADIUS + 1))) { OsmGpsMapPoint newpoint; osm_gps_map_convert_screen_to_geographic(map, ptx, pty, &newpoint); osm_gps_map_track_insert_point(track, &newpoint, ctr); osm_gps_map_map_redraw(map); return FALSE; } } else { first_x = cx; first_y = cy; } last_x = cx; last_y = cy; points = points->next; ctr++; } int ptx = (last_x+first_x)/2.0; int pty = (last_y+first_y)/2.0; float dist_sqrd = (event->x - ptx) * (event->x-ptx) + (event->y-pty) * (event->y-pty); if(dist_sqrd <= ((DOT_RADIUS + 1) * (DOT_RADIUS + 1))) { OsmGpsMapPoint newpoint; osm_gps_map_convert_screen_to_geographic(map, ptx, pty, &newpoint); osm_gps_map_track_insert_point(track, &newpoint, ctr); osm_gps_map_map_redraw(map); return FALSE; } } polys = polys->next; } } priv->is_button_down = TRUE; priv->drag_counter = 0; priv->drag_start_mouse_x = (int) event->x; priv->drag_start_mouse_y = (int) event->y; priv->drag_start_map_x = priv->map_x; priv->drag_start_map_y = priv->map_y; return FALSE; } static gboolean osm_gps_map_button_release (GtkWidget *widget, GdkEventButton *event) { OsmGpsMap *map = OSM_GPS_MAP(widget); OsmGpsMapPrivate *priv = map->priv; if(!priv->is_button_down) return FALSE; if (priv->is_dragging) { priv->is_dragging = FALSE; priv->map_x = priv->drag_start_map_x; priv->map_y = priv->drag_start_map_y; priv->map_x += (priv->drag_start_mouse_x - (int) event->x); priv->map_y += (priv->drag_start_mouse_y - (int) event->y); center_coord_update(map); osm_gps_map_map_redraw_idle(map); } if( priv->is_dragging_point) { priv->is_dragging_point = FALSE; osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, priv->drag_point); g_signal_emit_by_name(priv->drag_track, "point-changed"); } priv->drag_counter = -1; priv->is_button_down = FALSE; return FALSE; } static gboolean osm_gps_map_idle_expose (GtkWidget *widget) { OsmGpsMapPrivate *priv = OSM_GPS_MAP(widget)->priv; priv->drag_expose_source = 0; gtk_widget_queue_draw (widget); return FALSE; } static gboolean osm_gps_map_motion_notify (GtkWidget *widget, GdkEventMotion *event) { GdkModifierType state; OsmGpsMap *map = OSM_GPS_MAP(widget); OsmGpsMapPrivate *priv = map->priv; gint x, y; if(!priv->is_button_down) return FALSE; if(priv->is_dragging_point) { osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, priv->drag_point); osm_gps_map_map_redraw_idle(map); return FALSE; } if (event->is_hint) { // gdk_window_get_pointer (event->window, &x, &y, &state); #if GTK_CHECK_VERSION(3, 20, 0) // TODO: check if we can use gtk_widget_get_display(widget) instead of default GdkDevice* pointer = gdk_seat_get_pointer(gdk_display_get_default_seat(gdk_display_get_default())); #else GdkDevice* pointer = gdk_device_manager_get_client_pointer(gdk_display_get_device_manager( gdk_display_get_default())); #endif gdk_window_get_device_position( event->window, pointer, &x, &y, &state); } else { x = event->x; y = event->y; state = event->state; } // are we being dragged if (!(state & GDK_BUTTON1_MASK)) return FALSE; if (priv->drag_counter < 0) return FALSE; /* not yet dragged far enough? */ if(!priv->drag_counter && ( (x - priv->drag_start_mouse_x) * (x - priv->drag_start_mouse_x) + (y - priv->drag_start_mouse_y) * (y - priv->drag_start_mouse_y) < priv->drag_limit*priv->drag_limit)) return FALSE; priv->drag_counter++; priv->is_dragging = TRUE; if (priv->map_auto_center_enabled) g_object_set(G_OBJECT(widget), "auto-center", FALSE, NULL); priv->drag_mouse_dx = x - priv->drag_start_mouse_x; priv->drag_mouse_dy = y - priv->drag_start_mouse_y; /* instead of redrawing directly just add an idle function */ if (!priv->drag_expose_source) priv->drag_expose_source = g_idle_add ((GSourceFunc)osm_gps_map_idle_expose, widget); return FALSE; } static gboolean osm_gps_map_configure (GtkWidget *widget, GdkEventConfigure *event) { int w,h; GdkWindow *window; OsmGpsMap *map = OSM_GPS_MAP(widget); OsmGpsMapPrivate *priv = map->priv; if (priv->pixmap) cairo_surface_destroy (priv->pixmap); w = gtk_widget_get_allocated_width (widget); h = gtk_widget_get_allocated_height (widget); window = gtk_widget_get_window(widget); priv->pixmap = gdk_window_create_similar_surface ( window, CAIRO_CONTENT_COLOR, w + EXTRA_BORDER * 2, h + EXTRA_BORDER * 2); // pixel_x,y, offsets gint pixel_x = lon2pixel(priv->map_zoom, priv->center_rlon); gint pixel_y = lat2pixel(priv->map_zoom, priv->center_rlat); priv->map_x = pixel_x - w/2; priv->map_y = pixel_y - h/2; osm_gps_map_map_redraw(OSM_GPS_MAP(widget)); g_signal_emit_by_name(widget, "changed"); return FALSE; } static gboolean osm_gps_map_draw (GtkWidget *widget, cairo_t *cr) { OsmGpsMap *map = OSM_GPS_MAP(widget); OsmGpsMapPrivate *priv = map->priv; if (!priv->drag_mouse_dx && !priv->drag_mouse_dy) { cairo_set_source_surface (cr, priv->pixmap, 0, 0); } else { cairo_set_source_surface (cr, priv->pixmap, priv->drag_mouse_dx - EXTRA_BORDER, priv->drag_mouse_dy - EXTRA_BORDER); } cairo_paint (cr); if (priv->layers) { GSList *list; for(list = priv->layers; list != NULL; list = list->next) { OsmGpsMapLayer *layer = list->data; osm_gps_map_layer_draw(layer, map, cr); } } return FALSE; } static void osm_gps_map_class_init (OsmGpsMapClass *klass) { GObjectClass* object_class; GtkWidgetClass *widget_class; object_class = G_OBJECT_CLASS (klass); object_class->dispose = osm_gps_map_dispose; object_class->finalize = osm_gps_map_finalize; object_class->constructor = osm_gps_map_constructor; object_class->set_property = osm_gps_map_set_property; object_class->get_property = osm_gps_map_get_property; widget_class = GTK_WIDGET_CLASS (klass); widget_class->draw = osm_gps_map_draw; widget_class->configure_event = osm_gps_map_configure; widget_class->button_press_event = osm_gps_map_button_press; widget_class->button_release_event = osm_gps_map_button_release; widget_class->motion_notify_event = osm_gps_map_motion_notify; widget_class->scroll_event = osm_gps_map_scroll_event; //widget_class->get_preferred_width = osm_gps_map_get_preferred_width; //widget_class->get_preferred_height = osm_gps_map_get_preferred_height; /* default implementation of draw_gps_point */ klass->draw_gps_point = osm_gps_map_draw_gps_point; g_object_class_install_property (object_class, PROP_AUTO_CENTER, g_param_spec_boolean ("auto-center", "auto center", "map auto center", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_AUTO_CENTER_THRESHOLD, g_param_spec_float ("auto-center-threshold", "auto center threshold", "the amount of the window the gps point must move before auto centering", 0.0, /* minimum property value */ 1.0, /* maximum property value */ 0.25, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_RECORD_TRIP_HISTORY, g_param_spec_boolean ("record-trip-history", "record trip history", "should all gps points be recorded in a trip history", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_SHOW_TRIP_HISTORY, g_param_spec_boolean ("show-trip-history", "show trip history", "should the recorded trip history be shown on the map", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMap:show-gps-point: * * Controls whether the current gps point is shown on the map. Note that * for derived classes that implement the draw_gps_point vfunc, if this * property is %FALSE **/ g_object_class_install_property (object_class, PROP_SHOW_GPS_POINT, g_param_spec_boolean ("show-gps-point", "show gps point", "should the current gps point be shown on the map", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_AUTO_DOWNLOAD, g_param_spec_boolean ("auto-download", "auto download", "map auto download", TRUE, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMap:repo-uri: * * A URI string which defines the location and format to fetch tiles * for the map. The string is of the format * "http://tile.openstreetmap.org/#Z/#X/#Y.png". Characters * that begin with # are treated as tokens and replaced according to * the following rules; * * * * * \#X - X-tile, slippy map format * * * * * \#Y - Y-tile, slippy map format, mercator projection * * * * * \#Z - Zoom level, where min_zoom >= zoom <= max_zoom * * * * * \#S - Zoom level, where -max_zoom >= (zoom-max_zoom) <= min_zoom * * * * * \#Q - Quad tree format, set of "qrts" * * * * * \#Q0 - Quad tree format, set of "0123" * * * * * \#YS - Not Implemented * * * * * \#R - Random integer in range [0,4] * * * * * * * If you do not wish to use the default map tiles (provided by OpenStreeMap) * it is recommened that you use one of the predefined map sources, and thus * you should construct the map by setting #OsmGpsMap:map-source and not * #OsmGpsMap:repo-uri. The #OsmGpsMap:repo-uri property is primarily * designed for applications that wish complete control of tile repository * management, or wish to use #OsmGpsMap with a tile repository it does not * explicitly support. * * **/ g_object_class_install_property (object_class, PROP_REPO_URI, g_param_spec_string ("repo-uri", "repo uri", "Map source tile repository uri", OSM_REPO_URI, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_PROXY_URI, g_param_spec_string ("proxy-uri", "proxy uri", "HTTP proxy uri or NULL", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); /** * OsmGpsMap:user-agent: * * The default user-agent for downloading tiles from the #OsmGpsMap:map-source * is "libosmgpsmap/VERSION". The value of #OsmGpsMap:user-agent will be * appended to it. * * Since: 1.2.0 **/ g_object_class_install_property (object_class, PROP_USER_AGENT, g_param_spec_string ("user-agent", "user agent", "HTTP user agent or NULL", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMap:tile-cache: * * Either a full path or one of the special format URIs * #OSM_GPS_MAP_CACHE_DISABLED, #OSM_GPS_MAP_CACHE_AUTO, * #OSM_GPS_MAP_CACHE_FRIENDLY. Also see #OsmGpsMap:tile-cache-base for a * full understanding. * * #OSM_GPS_MAP_CACHE_DISABLED disables the on disk tile cache (so all tiles * are fetched from the network. #OSM_GPS_MAP_CACHE_AUTO causes the tile * cache to be /tile-cache-base/md5(repo-uri), where md5 is the md5sum * of #OsmGpsMap:repo-uri. #OSM_GPS_MAP_CACHE_FRIENDLY * causes the tile cache to be /tile-cache-base/friendlyname(repo-uri). * * Any other string is interpreted as a local path, i.e. /path/to/cache **/ g_object_class_install_property (object_class, PROP_TILE_CACHE_DIR, g_param_spec_string ("tile-cache", "tile cache", "Tile cache dir", OSM_GPS_MAP_CACHE_AUTO, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMap:tile-cache-base: * * The base directory of the tile cache when you have constructed * the map with #OsmGpsMap:tile-cache set to #OSM_GPS_MAP_CACHE_AUTO or * #OSM_GPS_MAP_CACHE_FRIENDLY * * The string is interpreted as a local path, i.e. /path/to/cache. If NULL * is supplied, map tiles are cached starting in the users cache directory, * (as outlined in the * * XDG Base Directory Specification). To get the * base directory where map tiles will be cached call * osm_gps_map_get_default_cache_directory() * **/ g_object_class_install_property (object_class, PROP_TILE_CACHE_BASE_DIR, g_param_spec_string ("tile-cache-base", "tile cache-base", "Base directory to which friendly and auto paths are appended", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); /** * OsmGpsMap:zoom: * * The map zoom level. Connect to ::notify::zoom if you want to be informed * when this changes. **/ g_object_class_install_property (object_class, PROP_ZOOM, g_param_spec_int ("zoom", "zoom", "Map zoom level", MIN_ZOOM, /* minimum property value */ MAX_ZOOM, /* maximum property value */ 3, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_TILE_ZOOM_OFFSET, g_param_spec_int ("tile-zoom-offset", "tile zoom-offset", "Number of zoom-levels to upsample tiles", MIN_TILE_ZOOM_OFFSET, /* minimum propery value */ MAX_TILE_ZOOM_OFFSET, /* maximum propery value */ 0, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_MAX_ZOOM, g_param_spec_int ("max-zoom", "max zoom", "Maximum zoom level", MIN_ZOOM, /* minimum property value */ MAX_ZOOM, /* maximum property value */ OSM_MAX_ZOOM, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_MIN_ZOOM, g_param_spec_int ("min-zoom", "min zoom", "Minimum zoom level", MIN_ZOOM, /* minimum property value */ MAX_ZOOM, /* maximum property value */ OSM_MIN_ZOOM, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_LATITUDE, g_param_spec_float ("latitude", "latitude", "Latitude in degrees", -90.0, /* minimum property value */ 90.0, /* maximum property value */ 0, G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_LONGITUDE, g_param_spec_float ("longitude", "longitude", "Longitude in degrees", -180.0, /* minimum property value */ 180.0, /* maximum property value */ 0, G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_MAP_X, g_param_spec_int ("map-x", "map-x", "Initial map x location", G_MININT, /* minimum property value */ G_MAXINT, /* maximum property value */ 890, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_MAP_Y, g_param_spec_int ("map-y", "map-y", "Initial map y location", G_MININT, /* minimum property value */ G_MAXINT, /* maximum property value */ 515, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); /** * OsmGpsMap:tiles-queued: * * The number of tiles currently waiting to download. Connect to * ::notify::tiles-queued if you want to be informed when this changes **/ g_object_class_install_property (object_class, PROP_TILES_QUEUED, g_param_spec_int ("tiles-queued", "tiles-queued", "The number of tiles currently waiting to download", G_MININT, /* minimum property value */ G_MAXINT, /* maximum property value */ 0, G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_GPS_TRACK_WIDTH, g_param_spec_float ("gps-track-width", "gps-track-width", "The width of the lines drawn for the gps track", 1.0, /* minimum property value */ 100.0, /* maximum property value */ 4.0, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_GPS_POINT_R1, g_param_spec_int ("gps-track-point-radius", "gps-track-point-radius", "The radius of the gps point inner circle", 0, /* minimum property value */ G_MAXINT, /* maximum property value */ 5, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_GPS_POINT_R2, g_param_spec_int ("gps-track-highlight-radius", "gps-track-highlight-radius", "The radius of the gps point highlight circle", 0, /* minimum property value */ G_MAXINT, /* maximum property value */ 20, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); /** * OsmGpsMap:map-source: * * A #OsmGpsMapSource_t representing the tile repository to use * * * * If you do not wish to use the default map tiles (provided by OpenStreeMap) * it is recommened that you set this property at construction, instead * of setting #OsmGpsMap:repo-uri. * * **/ g_object_class_install_property (object_class, PROP_MAP_SOURCE, g_param_spec_int ("map-source", "map source", "The map source ID", 0, /* minimum property value */ G_MAXINT, /* maximum property value */ 0, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); g_object_class_install_property (object_class, PROP_IMAGE_FORMAT, g_param_spec_string ("image-format", "image format", "The map source tile repository image format (jpg, png)", OSM_IMAGE_FORMAT, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, PROP_DRAG_LIMIT, g_param_spec_int ("drag-limit", "drag limit", "The number of pixels the user has to move the pointer in order to start dragging", 0, /* minimum property value */ G_MAXINT, /* maximum property value */ 10, G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); /** * OsmGpsMap::changed: * * The #OsmGpsMap::changed signal is emitted any time the map zoom or map center * is chaged (such as by dragging or zooming). * * * * If you are only interested in the map zoom, then you can simply connect * to ::notify::zoom * * **/ g_signal_new ("changed", OSM_TYPE_GPS_MAP, G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } /** * osm_gps_map_download_maps: * @map: a #OsmGpsMap widget * @pt1: (in): nort west corner * @pt2: (in): south east corner * @zoom_start: (in): start of zoom range * @zoom_end: (in): end of zoom range * * Downloads all tiles over the supplied zoom range in the rectangular * region specified by pt1 (north west corner) to pt2 (south east corner) * **/ void osm_gps_map_download_maps (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *pt2, int zoom_start, int zoom_end) { OsmGpsMapPrivate *priv = map->priv; if (pt1 && pt2) { gchar *filename; int i,j,zoom; int num_tiles = 0; zoom_end = CLAMP(zoom_end, priv->min_zoom, priv->max_zoom); zoom_start = CLAMP(zoom_start, priv->min_zoom, priv->max_zoom); for(zoom=zoom_start; zoom<=zoom_end; zoom++) { int x1,y1,x2,y2; x1 = (int)floorf((float)lon2pixel(zoom, pt1->rlon) / (float)TILESIZE); y1 = (int)floorf((float)lat2pixel(zoom, pt1->rlat) / (float)TILESIZE); x2 = (int)floorf((float)lon2pixel(zoom, pt2->rlon) / (float)TILESIZE); y2 = (int)floorf((float)lat2pixel(zoom, pt2->rlat) / (float)TILESIZE); /* check for insane ranges */ if ( (x2-x1) * (y2-y1) > MAX_DOWNLOAD_TILES ) { g_warning("Aborting download of zoom level %d and up, because " "number of tiles would exceed %d", zoom, MAX_DOWNLOAD_TILES); break; } /* loop x1-x2 */ for(i=x1; i<=x2; i++) { /* loop y1 - y2 */ for(j=y1; j<=y2; j++) { /* x = i, y = j */ filename = g_strdup_printf("%s%c%d%c%d%c%d.%s", priv->cache_dir, G_DIR_SEPARATOR, zoom, G_DIR_SEPARATOR, i, G_DIR_SEPARATOR, j, priv->image_format); if (!g_file_test(filename, G_FILE_TEST_EXISTS)) { osm_gps_map_download_tile(map, zoom, i, j, FALSE); num_tiles++; } g_free(filename); } } g_debug("DL @Z:%d = %d tiles", zoom, num_tiles); } } } static void cancel_message (char *key, GCancellable *cancellable, void *userdata) { g_cancellable_cancel(cancellable); } /** * osm_gps_map_download_cancel_all: * @map: a #OsmGpsMap widget * * Cancels all tiles currently being downloaded. Typically used if you wish to * cancel a large number of tiles queued using osm_gps_map_download_maps() * * Since: 0.7.0 **/ void osm_gps_map_download_cancel_all (OsmGpsMap *map) { OsmGpsMapPrivate *priv = map->priv; g_hash_table_foreach (priv->tile_queue, (GHFunc)cancel_message, NULL); } /** * osm_gps_map_get_bbox: * @map: a #OsmGpsMap widget * @pt1: (out): point to be filled with the top left location * @pt2: (out): point to be filled with the bottom right location * * Returns the geographic locations of the bounding box describing the contents * of the current window, i.e the top left and bottom right corners. **/ void osm_gps_map_get_bbox (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *pt2) { GtkAllocation allocation; OsmGpsMapPrivate *priv = map->priv; if (pt1 && pt2) { gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); pt1->rlat = pixel2lat(priv->map_zoom, priv->map_y); pt1->rlon = pixel2lon(priv->map_zoom, priv->map_x); pt2->rlat = pixel2lat(priv->map_zoom, priv->map_y + allocation.height); pt2->rlon = pixel2lon(priv->map_zoom, priv->map_x + allocation.width); } } /** * osm_gps_map_zoom_fit_bbox: * @map: a #OsmGpsMap widget * @latitude1: (in): latitude of 1st point in degrees * @latitude2: (in): latitude of 2nd point in degrees * @longitude1: (in): longtitude of 1st point in degrees * @longitude2: (in): longtitude of 2nd point in degrees * * Zoom and center the map so that both points fit inside the window. * * Since: 1.1.0 **/ void osm_gps_map_zoom_fit_bbox (OsmGpsMap *map, float latitude1, float latitude2, float longitude1, float longitude2) { GtkAllocation allocation; int zoom; gtk_widget_get_allocation (GTK_WIDGET (map), &allocation); zoom = latlon2zoom (allocation.height, allocation.width, deg2rad(latitude1), deg2rad(latitude2), deg2rad(longitude1), deg2rad(longitude2)); osm_gps_map_set_center_and_zoom (map, (latitude1 + latitude2) / 2, (longitude1 + longitude2) / 2, zoom); } /** * osm_gps_map_set_center_and_zoom: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @zoom: desired zoom level * * Set map center and desired zoom level * * Since: 0.7.0 **/ void osm_gps_map_set_center_and_zoom (OsmGpsMap *map, float latitude, float longitude, int zoom) { osm_gps_map_set_center (map, latitude, longitude); osm_gps_map_set_zoom (map, zoom); } /** * osm_gps_map_set_center: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * * Set map center, does not change zoom level * **/ void osm_gps_map_set_center (OsmGpsMap *map, float latitude, float longitude) { int pixel_x, pixel_y; OsmGpsMapPrivate *priv; GtkAllocation allocation; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); g_object_set(G_OBJECT(map), "auto-center", FALSE, NULL); priv->center_rlat = deg2rad(latitude); priv->center_rlon = deg2rad(longitude); pixel_x = lon2pixel(priv->map_zoom, priv->center_rlon); pixel_y = lat2pixel(priv->map_zoom, priv->center_rlat); priv->map_x = pixel_x - allocation.width/2; priv->map_y = pixel_y - allocation.height/2; osm_gps_map_map_redraw_idle(map); g_signal_emit_by_name(map, "changed"); } /** * osm_gps_map_set_zoom_offset: * @map: a #OsmGpsMap widget * @zoom_offset: tile zoom offset * * Set tile zoom offset * **/ void osm_gps_map_set_zoom_offset (OsmGpsMap *map, int zoom_offset) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP(map)); priv = map->priv; if (zoom_offset != priv->tile_zoom_offset) { priv->tile_zoom_offset = zoom_offset; osm_gps_map_map_redraw_idle (map); } } /** * osm_gps_map_set_zoom: * @map: a #OsmGpsMap widget * @zoom: (in): Desired zoom level * * Set map zoom to the desired zoom level * * Returns: zoom level * **/ int osm_gps_map_set_zoom (OsmGpsMap *map, int zoom) { int width_center, height_center; OsmGpsMapPrivate *priv; GtkAllocation allocation; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), 0); priv = map->priv; if (zoom != priv->map_zoom) { gtk_widget_get_allocation(GTK_WIDGET(map), &allocation); width_center = allocation.width / 2; height_center = allocation.height / 2; /* update zoom but constrain [min_zoom..max_zoom] */ priv->map_zoom = CLAMP(zoom, priv->min_zoom, priv->max_zoom); priv->map_x = lon2pixel(priv->map_zoom, priv->center_rlon) - width_center; priv->map_y = lat2pixel(priv->map_zoom, priv->center_rlat) - height_center; osm_gps_map_map_redraw_idle(map); g_signal_emit_by_name(map, "changed"); g_object_notify(G_OBJECT(map), "zoom"); } return priv->map_zoom; } /** * osm_gps_map_zoom_in: * @map: a #OsmGpsMap widget * * Zoom in by 1 step * * Returns: zoom level * **/ int osm_gps_map_zoom_in (OsmGpsMap *map) { g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), 0); return osm_gps_map_set_zoom(map, map->priv->map_zoom+1); } /** * osm_gps_map_zoom_out: * @map: a #OsmGpsMap widget * * Zoom out by 1 step * * Returns: zoom level * **/ int osm_gps_map_zoom_out (OsmGpsMap *map) { g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), 0); return osm_gps_map_set_zoom(map, map->priv->map_zoom-1); } /** * osm_gps_map_new: * * Returns a new #OsmGpsMap object, defaults to showing data from * OpenStreetMap * * See the properties description for more information about construction * parameters than could be passed to g_object_new() * * Returns: (transfer full): a newly created #OsmGpsMap object. **/ GtkWidget * osm_gps_map_new (void) { return g_object_new (OSM_TYPE_GPS_MAP, NULL); } /** * osm_gps_map_scroll: * @map: a #OsmGpsMap widget * @dx: pixels to scroll in NS (positive: scroll nort, negative: scroll south) * @dy: pixels to scroll in EW (positive: scroll east, negative: scroll west) * * Scrolls the map by @dx, @dy pixels (positive north, east) * **/ void osm_gps_map_scroll (OsmGpsMap *map, gint dx, gint dy) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; priv->map_x += dx; priv->map_y += dy; center_coord_update(map); osm_gps_map_map_redraw_idle (map); } /** * osm_gps_map_get_scale: * @map: a #OsmGpsMap widget * * Get the scale of the map at the center, in meters/pixel. * * Returns: the scale of the map at the center, in meters/pixel. * **/ float osm_gps_map_get_scale (OsmGpsMap *map) { OsmGpsMapPrivate *priv; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), OSM_GPS_MAP_INVALID); priv = map->priv; return osm_gps_map_get_scale_at_point(priv->map_zoom, priv->center_rlat, priv->center_rlon); } /** * osm_gps_map_get_default_cache_directory: * * Returns (transfer full): the default cache directory for the library, that is the base * directory to which the full cache path is appended. If * #OsmGpsMap:tile-cache-base is omitted from the constructor then this value * is used. * **/ gchar * osm_gps_map_get_default_cache_directory (void) { return g_build_filename( g_get_user_cache_dir(), "osmgpsmap", NULL); } /** * osm_gps_map_set_keyboard_shortcut: * @map: a #OsmGpsMap widget * @key: a #OsmGpsMapKey_t * @keyval: a keyval to bind * * Associates a keyboard shortcut with the supplied @keyval * (as returned by #gdk_keyval_from_name or simiar). The action given in @key * will be triggered when the corresponding @keyval is pressed. By default * no keyboard shortcuts are associated. * **/ void osm_gps_map_set_keyboard_shortcut (OsmGpsMap *map, OsmGpsMapKey_t key, guint keyval) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); g_return_if_fail(key < OSM_GPS_MAP_KEY_MAX); map->priv->keybindings[key] = keyval; map->priv->keybindings_enabled = TRUE; } /** * osm_gps_map_track_add: * @map: a #OsmGpsMap widget * @track: a @OsmGpsMapTrack object * * Add a track to map * * Since: 0.7.0 **/ void osm_gps_map_track_add (OsmGpsMap *map, OsmGpsMapTrack *track) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; g_object_ref(track); g_signal_connect(track, "point-added", G_CALLBACK(on_gps_point_added), map); g_signal_connect(track, "notify", G_CALLBACK(on_track_changed), map); priv->tracks = g_slist_append(priv->tracks, track); osm_gps_map_map_redraw_idle(map); } /** * osm_gps_map_track_remove_all: * @map: a #OsmGpsMap widget * * Remove all tracks * * Since: 0.7.0 **/ void osm_gps_map_track_remove_all (OsmGpsMap *map) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); gslist_of_gobjects_free(&map->priv->tracks); osm_gps_map_map_redraw_idle(map); } /** * osm_gps_map_track_remove: * @map: a #OsmGpsMap widget * @track: a #OsmGpsMapTrack object * * Remove given track from map * * Since: 0.7.0 **/ gboolean osm_gps_map_track_remove (OsmGpsMap *map, OsmGpsMapTrack *track) { GSList *data; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), FALSE); g_return_val_if_fail (track != NULL, FALSE); data = gslist_remove_one_gobject (&map->priv->tracks, G_OBJECT(track)); osm_gps_map_map_redraw_idle(map); return data != NULL; } void osm_gps_map_polygon_add (OsmGpsMap *map, OsmGpsMapPolygon *poly) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; g_object_ref(poly); OsmGpsMapTrack* track = osm_gps_map_polygon_get_track(poly); g_signal_connect(track, "point-added", G_CALLBACK(on_gps_point_added), map); g_signal_connect(track, "notify", G_CALLBACK(on_track_changed), map); priv->polygons = g_slist_append(priv->polygons, poly); osm_gps_map_map_redraw_idle(map); } void osm_gps_map_polygon_remove_all(OsmGpsMap *map) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); gslist_of_gobjects_free(&map->priv->polygons); osm_gps_map_map_redraw_idle(map); } gboolean osm_gps_map_polygon_remove(OsmGpsMap *map, OsmGpsMapPolygon *poly) { GSList *data; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), FALSE); g_return_val_if_fail (poly != NULL, FALSE); data = gslist_remove_one_gobject (&map->priv->polygons, G_OBJECT(poly)); osm_gps_map_map_redraw_idle(map); return data != NULL; } /** * osm_gps_map_gps_clear: * @map: a #OsmGpsMap widget * * Clear GPS track history * * Since: 0.7.0 **/ void osm_gps_map_gps_clear (OsmGpsMap *map) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; g_object_unref(priv->gps_track); priv->gps_track = osm_gps_map_track_new(); g_signal_connect(priv->gps_track, "point-added", G_CALLBACK(on_gps_point_added), map); g_signal_connect(priv->gps_track, "notify", G_CALLBACK(on_track_changed), map); osm_gps_map_map_redraw_idle(map); } /** * osm_gps_map_gps_get_track: * @map: a #OsmGpsMap widget * * Get internal GPS track history * * Returns: (transfer none): The #OsmGpsMapTrack of the internal GPS track, * i.e. that which is modified when calling osm_gps_map_gps_add(). You must * not free this. * Since: 0.7.0 **/ OsmGpsMapTrack * osm_gps_map_gps_get_track (OsmGpsMap *map) { g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), NULL); return map->priv->gps_track; } /** * osm_gps_map_gps_add: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @heading: GPS degrees or #OSM_GPS_MAP_INVALID to disable showing heading * * Set current GPS point to given lat/lon point with given heading. * If record-trip-history is set, add point to trip history * * Since: 0.7.0 **/ void osm_gps_map_gps_add (OsmGpsMap *map, float latitude, float longitude, float heading) { OsmGpsMapPrivate *priv; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); priv = map->priv; /* update the current point */ priv->gps->rlat = deg2rad(latitude); priv->gps->rlon = deg2rad(longitude); priv->gps_track_used = TRUE; priv->gps_heading = deg2rad(heading); /* If trip marker add to list of gps points */ if (priv->trip_history_record_enabled) { OsmGpsMapPoint point; osm_gps_map_point_set_degrees (&point, latitude, longitude); /* this will cause a redraw to be scheduled */ osm_gps_map_track_add_point (priv->gps_track, &point); } else { osm_gps_map_map_redraw_idle (map); maybe_autocenter_map (map); } } /** * osm_gps_map_image_add: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @image: (in): Image pixbuf * * Creates @OsmGpsMapImage with given params and adds it to map images * * Returns: (transfer full): A #OsmGpsMapImage representing the added pixbuf * Since: 0.7.0 **/ OsmGpsMapImage * osm_gps_map_image_add (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image) { return osm_gps_map_image_add_with_alignment_z (map, latitude, longitude, image, 0.5, 0.5, 0); } /** * osm_gps_map_image_add_z: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @image: (in): Image pixbuf * @zorder: z-order of image * * Creates @OsmGpsMapImage with given params and adds it to map images * * Returns: (transfer full): A #OsmGpsMapImage representing the added pixbuf * Since: 0.7.4 **/ OsmGpsMapImage * osm_gps_map_image_add_z (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, gint zorder) { return osm_gps_map_image_add_with_alignment_z (map, latitude, longitude, image, 0.5, 0.5, zorder); } static void on_image_changed (OsmGpsMapImage *image, GParamSpec *pspec, OsmGpsMap *map) { osm_gps_map_map_redraw_idle (map); } /** * osm_gps_map_image_add_with_alignment: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @image: (in): Image pixbuf * @xalign: x-align of image * @yalign: y-align of image * * Creates @OsmGpsMapImage with given params and adds it to map images * * Returns: (transfer full): A #OsmGpsMapImage representing the added pixbuf * Since: 0.7.0 **/ OsmGpsMapImage * osm_gps_map_image_add_with_alignment (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, float xalign, float yalign) { return osm_gps_map_image_add_with_alignment_z (map, latitude, longitude, image, xalign, yalign, 0); } static gint osm_gps_map_image_z_compare(gconstpointer item1, gconstpointer item2) { gint z1 = osm_gps_map_image_get_zorder(OSM_GPS_MAP_IMAGE(item1)); gint z2 = osm_gps_map_image_get_zorder(OSM_GPS_MAP_IMAGE(item2)); return(z1 - z2 + 1); } /** * osm_gps_map_image_add_with_alignment_z: * @map: a #OsmGpsMap widget * @latitude: latitude in degrees * @longitude: longitude in degrees * @image: (in): Image pixbuf * @xalign: x-align of image * @yalign: y-align of image * @zorder: z-order of image * * Creates @OsmGpsMapImage with given params and adds it to map images * * Returns: (transfer full): A #OsmGpsMapImage representing the added pixbuf * Since: 0.7.4 **/ OsmGpsMapImage * osm_gps_map_image_add_with_alignment_z (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, float xalign, float yalign, gint zorder) { OsmGpsMapImage *im; OsmGpsMapPoint pt; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), NULL); pt.rlat = deg2rad(latitude); pt.rlon = deg2rad(longitude); im = g_object_new (OSM_TYPE_GPS_MAP_IMAGE, "pixbuf", image, "x-align", xalign, "y-align", yalign, "point", &pt, "z-order", zorder, NULL); g_signal_connect(im, "notify", G_CALLBACK(on_image_changed), map); map->priv->images = g_slist_insert_sorted(map->priv->images, im, (GCompareFunc) osm_gps_map_image_z_compare); osm_gps_map_map_redraw_idle(map); g_object_ref(im); return im; } /** * osm_gps_map_image_remove: * @map: a #OsmGpsMap widget * @image: (in): a @OsmGpsMapImage to remove * * Remove image from list of images * * Returns: true if image was on list of images * * Since: 0.7.0 **/ gboolean osm_gps_map_image_remove (OsmGpsMap *map, OsmGpsMapImage *image) { GSList *data; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), FALSE); g_return_val_if_fail (image != NULL, FALSE); data = gslist_remove_one_gobject (&map->priv->images, G_OBJECT(image)); osm_gps_map_map_redraw_idle(map); return data != NULL; } /** * osm_gps_map_image_remove_all: * @map: a #OsmGpsMap widget * * Remove all images from map * * Since: 0.7.0 **/ void osm_gps_map_image_remove_all (OsmGpsMap *map) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); gslist_of_gobjects_free(&map->priv->images); osm_gps_map_map_redraw_idle(map); } /** * osm_gps_map_layer_add: * @map: a #OsmGpsMap widget * @layer: a #OsmGpsMapLayer object * * Add layer to map * * Since: 0.7.0 **/ void osm_gps_map_layer_add (OsmGpsMap *map, OsmGpsMapLayer *layer) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); g_return_if_fail (OSM_GPS_MAP_IS_LAYER (layer)); g_object_ref(G_OBJECT(layer)); map->priv->layers = g_slist_append(map->priv->layers, layer); } /** * osm_gps_map_layer_remove: * @map: a #OsmGpsMap widget * @layer: a #OsmGpsMapLayer object * * Remove layer from map * * Returns: whether layer was found and removed * Since: 0.7.0 **/ gboolean osm_gps_map_layer_remove (OsmGpsMap *map, OsmGpsMapLayer *layer) { GSList *data; g_return_val_if_fail (OSM_GPS_MAP_IS_MAP (map), FALSE); g_return_val_if_fail (layer != NULL, FALSE); data = gslist_remove_one_gobject (&map->priv->layers, G_OBJECT(layer)); osm_gps_map_map_redraw_idle(map); return data != NULL; } /** * osm_gps_map_layer_remove_all: * @map: a #OsmGpsMap widget * * Remove all layers from map * * Since: 0.7.0 **/ void osm_gps_map_layer_remove_all (OsmGpsMap *map) { g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); gslist_of_gobjects_free(&map->priv->layers); osm_gps_map_map_redraw_idle(map); } /** * osm_gps_map_convert_screen_to_geographic: * @map: a #OsmGpsMap widget * @pixel_x: pixel location on map, x axis * @pixel_y: pixel location on map, y axis * @pt: (out): location * * Convert the given pixel location on the map into corresponding * location on the globe * * Since: 0.7.0 **/ void osm_gps_map_convert_screen_to_geographic(OsmGpsMap *map, gint pixel_x, gint pixel_y, OsmGpsMapPoint *pt) { OsmGpsMapPrivate *priv; int map_x0, map_y0; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); g_return_if_fail (pt); priv = map->priv; map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; pt->rlat = pixel2lat(priv->map_zoom, map_y0 + pixel_y); pt->rlon = pixel2lon(priv->map_zoom, map_x0 + pixel_x); } /** * osm_gps_map_convert_geographic_to_screen: * @map: a #OsmGpsMap widget * @pt: location * @pixel_x: (out): pixel location on map, x axis * @pixel_y: (out): pixel location on map, y axis * * Convert the given location on the globe to the corresponding * pixel locations on the map. * * Since: 0.7.0 **/ void osm_gps_map_convert_geographic_to_screen(OsmGpsMap *map, OsmGpsMapPoint *pt, gint *pixel_x, gint *pixel_y) { OsmGpsMapPrivate *priv; int map_x0, map_y0; g_return_if_fail (OSM_GPS_MAP_IS_MAP (map)); g_return_if_fail (pt); priv = map->priv; map_x0 = priv->map_x - EXTRA_BORDER; map_y0 = priv->map_y - EXTRA_BORDER; if (pixel_x) *pixel_x = lon2pixel(priv->map_zoom, pt->rlon) - map_x0 + priv->drag_mouse_dx; if (pixel_y) *pixel_y = lat2pixel(priv->map_zoom, pt->rlat) - map_y0 + priv->drag_mouse_dy; } /** * osm_gps_map_get_event_location: * @map: a #OsmGpsMap widget * @event: A #GtkEventButton that occured on the map * * A convenience function for getting the geographic location of events, * such as mouse clicks, on the map * * Free returned point with g_free * * Returns: (transfer full): The point on the globe corresponding to the click * Since: 0.7.0 **/ OsmGpsMapPoint * osm_gps_map_get_event_location (OsmGpsMap *map, GdkEventButton *event) { OsmGpsMapPoint *p = osm_gps_map_point_new_degrees(0.0,0.0); osm_gps_map_convert_screen_to_geographic(map, event->x, event->y, p); return p; } osm-gps-map-1.2.2/src/osm-gps-map-widget.h000066400000000000000000000146031526276210300202450ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * Copyright (C) Marcus Bauer 2008 * Copyright (C) Till Harbaum 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_WIDGET_H_ #define _OSM_GPS_MAP_WIDGET_H_ #include #include #include #include #include G_BEGIN_DECLS #define OSM_TYPE_GPS_MAP (osm_gps_map_get_type ()) #define OSM_GPS_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), OSM_TYPE_GPS_MAP, OsmGpsMap)) #define OSM_GPS_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), OSM_TYPE_GPS_MAP, OsmGpsMapClass)) #define OSM_GPS_MAP_IS_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), OSM_TYPE_GPS_MAP)) #define OSM_GPS_MAP_IS_MAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), OSM_TYPE_GPS_MAP)) #define OSM_GPS_MAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), OSM_TYPE_GPS_MAP, OsmGpsMapClass)) typedef struct _OsmGpsMapClass OsmGpsMapClass; typedef struct _OsmGpsMap OsmGpsMap; typedef struct _OsmGpsMapPrivate OsmGpsMapPrivate; #include "osm-gps-map-layer.h" #include "osm-gps-map-point.h" #include "osm-gps-map-track.h" #include "osm-gps-map-polygon.h" #include "osm-gps-map-image.h" struct _OsmGpsMapClass { GtkDrawingAreaClass parent_class; void (*draw_gps_point) (OsmGpsMap *map, cairo_t *cr); }; struct _OsmGpsMap { GtkDrawingArea parent_instance; OsmGpsMapPrivate *priv; }; typedef enum { OSM_GPS_MAP_KEY_FULLSCREEN, OSM_GPS_MAP_KEY_ZOOMIN, OSM_GPS_MAP_KEY_ZOOMOUT, OSM_GPS_MAP_KEY_UP, OSM_GPS_MAP_KEY_DOWN, OSM_GPS_MAP_KEY_LEFT, OSM_GPS_MAP_KEY_RIGHT, OSM_GPS_MAP_KEY_MAX } OsmGpsMapKey_t; #define OSM_GPS_MAP_INVALID (0.0/0.0) #define OSM_GPS_MAP_CACHE_DISABLED "none://" #define OSM_GPS_MAP_CACHE_AUTO "auto://" #define OSM_GPS_MAP_CACHE_FRIENDLY "friendly://" GType osm_gps_map_get_type (void) G_GNUC_CONST; GtkWidget* osm_gps_map_new (void); gchar* osm_gps_map_get_default_cache_directory (void); void osm_gps_map_download_maps (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *pt2, int zoom_start, int zoom_end); void osm_gps_map_download_cancel_all (OsmGpsMap *map); void osm_gps_map_get_bbox (OsmGpsMap *map, OsmGpsMapPoint *pt1, OsmGpsMapPoint *pt2); void osm_gps_map_zoom_fit_bbox (OsmGpsMap *map, float latitude1, float latitude2, float longitude1, float longitude2); void osm_gps_map_set_center_and_zoom (OsmGpsMap *map, float latitude, float longitude, int zoom); void osm_gps_map_set_center (OsmGpsMap *map, float latitude, float longitude); int osm_gps_map_set_zoom (OsmGpsMap *map, int zoom); void osm_gps_map_set_zoom_offset (OsmGpsMap *map, int zoom_offset); int osm_gps_map_zoom_in (OsmGpsMap *map); int osm_gps_map_zoom_out (OsmGpsMap *map); void osm_gps_map_scroll (OsmGpsMap *map, gint dx, gint dy); float osm_gps_map_get_scale (OsmGpsMap *map); void osm_gps_map_set_keyboard_shortcut (OsmGpsMap *map, OsmGpsMapKey_t key, guint keyval); void osm_gps_map_track_add (OsmGpsMap *map, OsmGpsMapTrack *track); void osm_gps_map_track_remove_all (OsmGpsMap *map); gboolean osm_gps_map_track_remove (OsmGpsMap *map, OsmGpsMapTrack *track); void osm_gps_map_polygon_add (OsmGpsMap *map, OsmGpsMapPolygon *poly); void osm_gps_map_polygon_remove_all (OsmGpsMap *map); gboolean osm_gps_map_polygon_remove (OsmGpsMap *map, OsmGpsMapPolygon *poly); void osm_gps_map_gps_add (OsmGpsMap *map, float latitude, float longitude, float heading); void osm_gps_map_gps_clear (OsmGpsMap *map); OsmGpsMapTrack *osm_gps_map_gps_get_track (OsmGpsMap *map); OsmGpsMapImage *osm_gps_map_image_add (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image); OsmGpsMapImage *osm_gps_map_image_add_z (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, gint zorder); OsmGpsMapImage *osm_gps_map_image_add_with_alignment (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, float xalign, float yalign); OsmGpsMapImage *osm_gps_map_image_add_with_alignment_z (OsmGpsMap *map, float latitude, float longitude, GdkPixbuf *image, float xalign, float yalign, gint zorder); gboolean osm_gps_map_image_remove (OsmGpsMap *map, OsmGpsMapImage *image); void osm_gps_map_image_remove_all (OsmGpsMap *map); void osm_gps_map_layer_add (OsmGpsMap *map, OsmGpsMapLayer *layer); gboolean osm_gps_map_layer_remove (OsmGpsMap *map, OsmGpsMapLayer *layer); void osm_gps_map_layer_remove_all (OsmGpsMap *map); void osm_gps_map_convert_screen_to_geographic(OsmGpsMap *map, gint pixel_x, gint pixel_y, OsmGpsMapPoint *pt); void osm_gps_map_convert_geographic_to_screen(OsmGpsMap *map, OsmGpsMapPoint *pt, gint *pixel_x, gint *pixel_y); OsmGpsMapPoint *osm_gps_map_get_event_location (OsmGpsMap *map, GdkEventButton *event); gboolean osm_gps_map_map_redraw (OsmGpsMap *map); void osm_gps_map_map_redraw_idle (OsmGpsMap *map); G_END_DECLS #endif /* _OSM_GPS_MAP_WIDGET_H_ */ osm-gps-map-1.2.2/src/osm-gps-map.h000066400000000000000000000021761526276210300167660ustar00rootroot00000000000000/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4 -*- */ /* vim:set et sw=4 ts=4 */ /* * Copyright (C) 2013 John Stowers * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _OSM_GPS_MAP_H_ #define _OSM_GPS_MAP_H_ #include #include #include #include #include #include #include #include #endif /* _OSM_GPS_MAP_H_ */ osm-gps-map-1.2.2/src/private.h000066400000000000000000000035271526276210300163010ustar00rootroot00000000000000/* * Copyright (C) Marcus Bauer 2008 * Copyright (C) John Stowers 2013 * * Contributions by * Everaldo Canuto 2009 * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef _PRIVATE_H_ #define _PRIVATE_H_ #include #include #include #include "osm-gps-map-widget.h" #define TILESIZE 256 #define MAX_ZOOM 20 #define MIN_ZOOM 0 #define MAX_TILE_ZOOM_OFFSET 10 #define MIN_TILE_ZOOM_OFFSET 0 #define OSM_REPO_URI "https://tile.openstreetmap.org/#Z/#X/#Y.png" #define OSM_MIN_ZOOM 1 #define OSM_MAX_ZOOM 20 #define OSM_IMAGE_FORMAT "png" #define URI_MARKER_X "#X" #define URI_MARKER_Y "#Y" #define URI_MARKER_Z "#Z" #define URI_MARKER_S "#S" #define URI_MARKER_Q "#Q" #define URI_MARKER_Q0 "#W" #define URI_MARKER_YS "#U" #define URI_MARKER_R "#R" #define URI_HAS_X (1 << 0) #define URI_HAS_Y (1 << 1) #define URI_HAS_Z (1 << 2) #define URI_HAS_S (1 << 3) #define URI_HAS_Q (1 << 4) #define URI_HAS_Q0 (1 << 5) #define URI_HAS_YS (1 << 6) #define URI_HAS_R (1 << 7) //.... #define URI_FLAG_END (1 << 8) /* equatorial radius in meters */ #define OSM_EQ_RADIUS (6378137.0) #endif /* _PRIVATE_H_ */ osm-gps-map-1.2.2/tests/000077500000000000000000000000001526276210300150225ustar00rootroot00000000000000osm-gps-map-1.2.2/tests/test.py000066400000000000000000000224771526276210300163670ustar00rootroot00000000000000#!/usr/bin/env python3 import os import tempfile import unittest import cairo import io import gi gi.require_version('OsmGpsMap', '1.0') gi.require_version('Soup', '3.0') gi.require_foreign('cairo') from gi.repository import OsmGpsMap from gi.repository import Gdk, GdkPixbuf, GLib, GObject, Gtk, Soup class TestOsmGpsMap(unittest.TestCase): def setUp(self): self.lat = 50 self.lon = 13 self.zoom = 15 self.osm = OsmGpsMap.Map(user_agent="test/0.1") def test_map(self): test_window = Gtk.Window() test_window.set_title("OsmGpsMap") test_window.connect("destroy", Gtk.main_quit) test_window.show() test_window.set_size_request(640, 480) test_window.add(self.osm) test_window.show_all() self.osm.set_zoom(self.zoom) self.assertEqual(self.osm.get_property('zoom'), self.zoom) self.osm.zoom_in() self.assertEqual(self.osm.get_property('zoom'), self.zoom+1) self.osm.zoom_out() self.assertEqual(self.osm.get_property('zoom'), self.zoom) self.osm.set_center_and_zoom(self.lat, self.lon, self.zoom) self.assertEqual(self.osm.get_property("latitude"), self.lat) self.assertEqual(self.osm.get_property("longitude"), self.lon) self.lat += 1 self.lon += 1 self.osm.set_center(self.lat, self.lon) self.assertEqual(self.osm.get_property("latitude"), self.lat) self.assertEqual(self.osm.get_property("longitude"), self.lon) self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENCYCLEMAP) self.osm.set_property("map-source", OsmGpsMap.MapSource_t.OPENSTREETMAP) self.osm.set_property("auto-center", False) self.osm.set_property("auto-center", True) self.osm.set_property("user-agent", "test/0.2") self.assertEqual(self.osm.get_property("user-agent"), "test/0.2") self.osm.set_property("user-agent", None) self.assertEqual(self.osm.get_property("user-agent"), None) self.osm.gps_add(self.lat, self.lon, heading=OsmGpsMap.MAP_INVALID); track = self.osm.gps_get_track() self.assertEqual(type(track), OsmGpsMap.MapTrack) self.osm.gps_clear() def test_layer(self): osd = OsmGpsMap.MapOsd(show_zoom=True, show_coordinates=False, show_scale=False, show_dpad=True, show_gps_in_dpad=True) self.osm.layer_add(osd) self.osm.layer_remove(osd) def test_custom_layer_draw(self): # MapLayer.do_draw gets the widget cairo_t; convert lat/lon in pixels. class Layer(GObject.GObject, OsmGpsMap.MapLayer): def __init__(self): GObject.GObject.__init__(self) self.drew = False self.xy = None def do_draw(self, gpsmap, cr): pt = OsmGpsMap.MapPoint.new_degrees(50.0, 13.0) x, y = gpsmap.convert_geographic_to_screen(pt) cr.set_source_rgba(1, 0, 0, 1) cr.arc(x, y, 4, 0, 6.28) cr.fill() self.xy = (x, y) self.drew = True def do_render(self, gpsmap): pass def do_busy(self): return False def do_button_press(self, gpsmap, event): return False GObject.type_register(Layer) layer = Layer() window = Gtk.Window() window.set_size_request(320, 240) window.add(self.osm) self.osm.layer_add(layer) self.osm.set_center_and_zoom(50.0, 13.0, 10) window.show_all() deadline = GLib.get_monotonic_time() + 500000 while GLib.get_monotonic_time() < deadline and not layer.drew: Gtk.main_iteration_do(False) self.assertTrue(layer.drew) self.assertIsNotNone(layer.xy) alloc = self.osm.get_allocation() self.assertAlmostEqual(layer.xy[0], alloc.width / 2, delta=40) self.assertAlmostEqual(layer.xy[1], alloc.height / 2, delta=40) self.osm.layer_remove(layer) window.remove(self.osm) window.destroy() def test_image(self): size = 16 drawable = cairo.ImageSurface(cairo.FORMAT_RGB24, size, size) ctx = cairo.Context(drawable) # transparent background ctx.set_source_rgba(1, 1, 1, 1) ctx.rectangle(0, 0, size, size) ctx.fill() ctx.stroke() # red arc ctx.set_source_rgb(1, 0, 0) ctx.arc(size/2, size/2, size/2-1, 0, 3.14*2) ctx.fill() ctx.stroke() # convert the cairo context to a GdkPixbuf buffer = io.BytesIO() drawable.write_to_png(buffer) loader = GdkPixbuf.PixbufLoader.new_with_type('png') loader.write(buffer.getvalue()) buffer.close() loader.close() pixbuf = loader.get_pixbuf() image = pixbuf.add_alpha(True , 255, 255, 255) for x in range(0, 5): pointer = self.osm.image_add(self.lat+x, self.lon+x, image) self.osm.image_remove(pointer) self.osm.image_remove_all() def test_track(self): track = OsmGpsMap.MapTrack() self.osm.track_add(track) color = Gdk.RGBA(1, 0, 1, 0) track.set_property('color', color) color2 = track.get_color() self.assertEqual(color, color2) points = [] for x in range(0, 5): point = OsmGpsMap.MapPoint.new_degrees(self.lat+x, self.lon+x) track.add_point(point) points.append(point) self.assertEqual(track.n_points(), 5) self.assertEqual(track.get_length(), 522318.175858659) track.remove_point(3) self.assertEqual(track.n_points(), 4) self.assertEqual(type(track.get_point(3)), OsmGpsMap.MapPoint) returned_points = track.get_points() self.assertEqual(len(returned_points), 4) self.osm.track_remove(track) def test_insert_point(self): # Issue #45: check insert_point does not double-free. track = OsmGpsMap.MapTrack() point = OsmGpsMap.MapPoint.new_degrees(self.lat, self.lon) track.insert_point(point, 0) self.assertEqual(track.n_points(), 1) def test_pending_tile_download_survives_map_teardown(self): server = Soup.Server() def serve(_server, message, _path, _query): message.pause() server.add_handler(None, serve) server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY) self.addCleanup(server.disconnect) uri = server.get_uris()[0].to_string() osm = OsmGpsMap.Map(user_agent="test/0.1", repo_uri=uri + "#Z/#X/#Y.png", tile_cache="none://") criticals = [] def on_critical(_domain, _level, message, _data): criticals.append(message) for domain in ("GLib", "GLib-GObject", "Gtk", "OsmGpsMap"): hid = GLib.log_set_handler(domain, GLib.LogLevelFlags.LEVEL_CRITICAL, on_critical, None) self.addCleanup(GLib.log_remove_handler, domain, hid) window = Gtk.OffscreenWindow() window.set_default_size(256, 256) queued = [] osm.connect("notify::tiles-queued", lambda m, _p: queued.append(m.get_property("tiles-queued"))) window.add(osm) window.show_all() deadline = GLib.get_monotonic_time() + 1000000 while not queued and GLib.get_monotonic_time() < deadline: Gtk.main_iteration_do(False) self.assertTrue(queued) released = [] osm.weak_ref(lambda: released.append(True)) window.destroy() del osm deadline = GLib.get_monotonic_time() + 1000000 while not released and GLib.get_monotonic_time() < deadline: Gtk.main_iteration_do(False) self.assertTrue(released, "Download callbacks did not release the map") self.assertEqual(criticals, []) def test_convert_screen_to_geographic(self): # GI returns the MapPoint; do not pass one in. pt = self.osm.convert_screen_to_geographic(0, 0) self.assertEqual(type(pt), OsmGpsMap.MapPoint) lat, lon = pt.get_degrees() self.assertTrue(-90.0 <= lat <= 90.0) self.assertTrue(-180.0 <= lon <= 180.0) def test_zoom_fit_bbox_point(self): # Degenerate bbox (one geotag). Must not crash; zoom clamps to max. self.osm.zoom_fit_bbox(self.lat, self.lat, self.lon, self.lon) self.assertEqual(self.osm.get_property('zoom'), self.osm.get_property('max-zoom')) def test_negative_map_origin_tiles_align_with_overlay(self): # Issue #119: C / truncates toward 0. Negative map-x/map-y must floor so # tiles stay locked to overlays. Zoom 1, 800x800 window, center 0,0 # makes both origins negative. Red cached tiles vs white outside the world. cache_dir = tempfile.TemporaryDirectory(prefix="osm-gps-map-tiles-") self.addCleanup(cache_dir.cleanup) cache = cache_dir.name tile = cairo.ImageSurface(cairo.FORMAT_RGB24, 256, 256) cr = cairo.Context(tile) cr.set_source_rgb(1, 0, 0) cr.paint() for x in (0, 1): for y in (0, 1): path = os.path.join(cache, "1", str(x), "%d.png" % y) os.makedirs(os.path.dirname(path), exist_ok=True) tile.write_to_png(path) osm = OsmGpsMap.Map(user_agent="test/0.1", tile_cache=cache, auto_download=False) window = Gtk.OffscreenWindow() self.addCleanup(window.destroy) window.set_default_size(800, 800) window.add(osm) self.addCleanup(window.remove, osm) window.show_all() osm.set_center_and_zoom(0.0, 0.0, 1) deadline = GLib.get_monotonic_time() + 1000000 r = g = b = None while GLib.get_monotonic_time() < deadline: Gtk.main_iteration_do(False) if osm.get_property("map-x") >= 0 or osm.get_property("map-y") >= 0: continue pixbuf = window.get_pixbuf() if pixbuf is None or pixbuf.get_width() < 800 or pixbuf.get_height() < 800: continue pt = OsmGpsMap.MapPoint.new_degrees(0.0, 0.0) sx, sy = osm.convert_geographic_to_screen(pt) pixels = pixbuf.get_pixels() nch = pixbuf.get_n_channels() row = pixbuf.get_rowstride() i = int(sy) * row + int(sx) * nch r, g, b = pixels[i], pixels[i + 1], pixels[i + 2] if r + g + b > 0: break self.assertLess(osm.get_property("map-x"), 0) self.assertNotEqual(osm.get_property("map-x") % 256, 0) self.assertLess(osm.get_property("map-y"), 0) self.assertNotEqual(osm.get_property("map-y") % 256, 0) self.assertIsNotNone(r) self.assertGreater(r, 200) self.assertLess(g, 50) self.assertLess(b, 50) if __name__ == "__main__": unittest.main() osm-gps-map-1.2.2/uncrustify.cfg000066400000000000000000001434631526276210300165670ustar00rootroot00000000000000# Uncrustify 0.52 # # General options # # The type of line endings newlines = lf # auto/lf/crlf/cr # The original size of tabs in the input input_tab_size = 4 # number # The size of tabs in the output (only used if align_with_tabs=true) output_tab_size = 4 # number # The ascii value of the string escape char, usually 92 (\) or 94 (^). (Pawn) string_escape_char = 92 # number # Alternate string escape char for Pawn. Only works right before the quote char. string_escape_char2 = 0 # number # # Indenting # # The number of columns to indent per level. # Usually 2, 3, 4, or 8. indent_columns = 4 # number # How to use tabs when indenting code # 0=spaces only # 1=indent with tabs, align with spaces # 2=indent and align with tabs indent_with_tabs = 0 # number # Whether to indent strings broken by '\' so that they line up indent_align_string = false # false/true # The number of spaces to indent multi-line XML strings. # Requires indent_align_string=True indent_xml_string = 0 # number # Spaces to indent '{' from level indent_brace = 0 # number # Whether braces are indented to the body level indent_braces = false # false/true # Disabled indenting function braces if indent_braces is true indent_braces_no_func = false # false/true # Indent based on the size of the brace parent, ie 'if' => 3 spaces, 'for' => 4 spaces, etc. indent_brace_parent = false # false/true # Whether the 'namespace' body is indented indent_namespace = false # false/true # Whether the 'extern "C"' body is indented indent_extern = false # false/true # Whether the 'class' body is indented indent_class = false # false/true # Whether to indent the stuff after a leading class colon indent_class_colon = false # false/true # False=treat 'else\nif' as 'else if' for indenting purposes # True=indent the 'if' one level indent_else_if = false # false/true # Amount to indent variable declarations after a open brace. neg=relative, pos=absolute indent_var_def_blk = 0 # number # True: indent continued function call parameters one indent level # False: align parameters under the open paren indent_func_call_param = false # false/true # Same as indent_func_call_param, but for function defs indent_func_def_param = false # false/true # Same as indent_func_call_param, but for function protos indent_func_proto_param = false # false/true # Same as indent_func_call_param, but for class declarations indent_func_class_param = false # false/true # Same as indent_func_call_param, but for class variable constructors indent_func_ctor_var_param = false # false/true # Same as indent_func_call_param, but for templates indent_template_param = false # false/true # Double the indent for indent_func_xxx_param options indent_func_param_double = false # false/true # Indentation column for standalone 'const' function decl/proto qualifier indent_func_const = 0 # number # Indentation column for standalone 'throw' function decl/proto qualifier indent_func_throw = 0 # number # The number of spaces to indent a continued '->' or '.' # Usually set to 0, 1, or indent_columns. indent_member = 0 # number # Spaces to indent single line ('//') comments on lines before code indent_sing_line_comments = 0 # number # If set, will indent trailing single line ('//') comments relative # to the code instead of trying to keep the same absolute column indent_relative_single_line_comments = false # false/true # Spaces to indent 'case' from 'switch' # Usually 0 or indent_columns. indent_switch_case = 4 # number # Spaces to shift the 'case' line, without affecting any other lines # Usually 0. indent_case_shift = 0 # number # Spaces to indent '{' from 'case'. # By default, the brace will appear under the 'c' in case. # Usually set to 0 or indent_columns. indent_case_brace = 0 # number # Whether to indent comments found in first column indent_col1_comment = false # false/true # How to indent goto labels # >0 : absolute column where 1 is the leftmost column # <=0 : subtract from brace indent indent_label = 1 # number # Same as indent_label, but for access specifiers that are followed by a colon indent_access_spec = 1 # number # Indent the code after an access specifier by one level. # If set, this option forces 'indent_access_spec=0' indent_access_spec_body = false # false/true # If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended) indent_paren_nl = false # false/true # Controls the indent of a close paren after a newline. # 0: Indent to body level # 1: Align under the open paren # 2: Indent to the brace level indent_paren_close = 0 # number # Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren indent_comma_paren = false # false/true # Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren indent_bool_paren = false # false/true # If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended) indent_square_nl = false # false/true # Don't change the relative indent of ESQL/C 'EXEC SQL' bodies indent_preserve_sql = false # false/true # Align continued statements at the '='. Default=True # If FALSE or the '=' is followed by a newline, the next line is indent one tab. indent_align_assign = true # false/true # # Spacing options # # Add or remove space around arithmetic operator '+', '-', '/', '*', etc sp_arith = ignore # ignore/add/remove/force # Add or remove space around assignment operator '=', '+=', etc sp_assign = ignore # ignore/add/remove/force # Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign. sp_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign. sp_after_assign = ignore # ignore/add/remove/force # Add or remove space around assignment '=' in enum sp_enum_assign = ignore # ignore/add/remove/force # Add or remove space before assignment '=' in enum. Overrides sp_enum_assign. sp_enum_before_assign = ignore # ignore/add/remove/force # Add or remove space after assignment '=' in enum. Overrides sp_enum_assign. sp_enum_after_assign = ignore # ignore/add/remove/force # Add or remove space around boolean operators '&&' and '||' sp_bool = ignore # ignore/add/remove/force # Add or remove space around compare operator '<', '>', '==', etc sp_compare = ignore # ignore/add/remove/force # Add or remove space inside '(' and ')' sp_inside_paren = ignore # ignore/add/remove/force # Add or remove space between nested parens sp_paren_paren = ignore # ignore/add/remove/force # Whether to balance spaces inside nested parens sp_balance_nested_parens = false # false/true # Add or remove space between ')' and '{' sp_paren_brace = ignore # ignore/add/remove/force # Add or remove space before pointer star '*' sp_before_ptr_star = ignore # ignore/add/remove/force # Add or remove space before pointer star '*' that isn't followed by a variable name # If set to 'ignore', sp_before_ptr_star is used instead. sp_before_unnamed_ptr_star = ignore # ignore/add/remove/force # Add or remove space between pointer stars '*' sp_between_ptr_star = ignore # ignore/add/remove/force # Add or remove space after pointer star '*', if followed by a word. sp_after_ptr_star = ignore # ignore/add/remove/force # Add or remove space after a pointer star '*', if followed by a func proto/def. sp_after_ptr_star_func = ignore # ignore/add/remove/force # Add or remove space before a pointer star '*', if followed by a func proto/def. sp_before_ptr_star_func = ignore # ignore/add/remove/force # Add or remove space before a reference sign '&' sp_before_byref = ignore # ignore/add/remove/force # Add or remove space before a reference sign '&' that isn't followed by a variable name # If set to 'ignore', sp_before_byref is used instead. sp_before_unnamed_byref = ignore # ignore/add/remove/force # Add or remove space after reference sign '&', if followed by a word. sp_after_byref = ignore # ignore/add/remove/force # Add or remove space after a reference sign '&', if followed by a func proto/def. sp_after_byref_func = ignore # ignore/add/remove/force # Add or remove space before a reference sign '&', if followed by a func proto/def. sp_before_byref_func = ignore # ignore/add/remove/force # Add or remove space between type and word sp_after_type = force # ignore/add/remove/force # Add or remove space in 'template <' vs 'template<'. # If set to ignore, sp_before_angle is used. sp_template_angle = ignore # ignore/add/remove/force # Add or remove space before '<>' sp_before_angle = ignore # ignore/add/remove/force # Add or remove space inside '<' and '>' sp_inside_angle = ignore # ignore/add/remove/force # Add or remove space after '<>' sp_after_angle = ignore # ignore/add/remove/force # Add or remove space between '<>' and '(' as found in 'new List();' sp_angle_paren = ignore # ignore/add/remove/force # Add or remove space between '<>' and a word as in 'List m;' sp_angle_word = ignore # ignore/add/remove/force # Add or remove space before '(' of 'if', 'for', 'switch', and 'while' sp_before_sparen = force # ignore/add/remove/force # Add or remove space inside if-condition '(' and ')' sp_inside_sparen = ignore # ignore/add/remove/force # Add or remove space before if-condition ')'. Overrides sp_inside_sparen. sp_inside_sparen_close = ignore # ignore/add/remove/force # Add or remove space after ')' of 'if', 'for', 'switch', and 'while' sp_after_sparen = ignore # ignore/add/remove/force # Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while' sp_sparen_brace = ignore # ignore/add/remove/force # Add or remove space between 'invariant' and '(' in the D language. sp_invariant_paren = ignore # ignore/add/remove/force # Add or remove space after the ')' in 'invariant (C) c' in the D language. sp_after_invariant_paren = ignore # ignore/add/remove/force # Add or remove space before empty statement ';' on 'if', 'for' and 'while' sp_special_semi = ignore # ignore/add/remove/force # Add or remove space before ';' sp_before_semi = ignore # ignore/add/remove/force # Add or remove space before ';' in non-empty 'for' statements sp_before_semi_for = ignore # ignore/add/remove/force # Add or remove space before a semicolon of an empty part of a for statment. sp_before_semi_for_empty = ignore # ignore/add/remove/force # Add or remove space after the final semicolon of an empty part of a for statment: for ( ; ; ). sp_after_semi_for_empty = ignore # ignore/add/remove/force # Add or remove space before '[' (except '[]') sp_before_square = ignore # ignore/add/remove/force # Add or remove space before '[]' sp_before_squares = ignore # ignore/add/remove/force # Add or remove space inside '[' and ']' sp_inside_square = ignore # ignore/add/remove/force # Add or remove space after ',' sp_after_comma = ignore # ignore/add/remove/force # Add or remove space before ',' sp_before_comma = remove # ignore/add/remove/force # Add or remove space after class ':' sp_after_class_colon = ignore # ignore/add/remove/force # Add or remove space before class ':' sp_before_class_colon = ignore # ignore/add/remove/force # Add or remove space before case ':' sp_before_case_colon = remove # ignore/add/remove/force # Add or remove space between 'operator' and operator sign sp_after_operator = ignore # ignore/add/remove/force # Add or remove space between the operator symbol and the open paren, as in 'operator ++(' sp_after_operator_sym = ignore # ignore/add/remove/force # Add or remove space after C/D cast, ie 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a' sp_after_cast = ignore # ignore/add/remove/force # Add or remove spaces inside cast parens sp_inside_paren_cast = ignore # ignore/add/remove/force # Add or remove space between the type and open paren in a C++ cast, ie 'int(exp)' vs 'int (exp)' sp_cpp_cast_paren = ignore # ignore/add/remove/force # Add or remove space between 'sizeof' and '(' sp_sizeof_paren = ignore # ignore/add/remove/force # Add or remove space after the tag keyword (Pawn) sp_after_tag = ignore # ignore/add/remove/force # Add or remove space inside enum '{' and '}' sp_inside_braces_enum = ignore # ignore/add/remove/force # Add or remove space inside struct/union '{' and '}' sp_inside_braces_struct = ignore # ignore/add/remove/force # Add or remove space inside '{' and '}' sp_inside_braces = ignore # ignore/add/remove/force # Add or remove space inside '{}' sp_inside_braces_empty = ignore # ignore/add/remove/force # Add or remove space between return type and function name # A minimum of 1 is forced except for pointer return types. sp_type_func = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function declaration sp_func_proto_paren = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function definition sp_func_def_paren = ignore # ignore/add/remove/force # Add or remove space inside empty function '()' sp_inside_fparens = ignore # ignore/add/remove/force # Add or remove space inside function '(' and ')' sp_inside_fparen = ignore # ignore/add/remove/force # Add or remove space between ']' and '(' when part of a function call. sp_square_fparen = ignore # ignore/add/remove/force # Add or remove space between ')' and '{' of function sp_fparen_brace = ignore # ignore/add/remove/force # Add or remove space between function name and '(' on function calls sp_func_call_paren = ignore # ignore/add/remove/force # Add or remove space between the user function name and '(' on function calls # You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file. sp_func_call_user_paren = ignore # ignore/add/remove/force # Add or remove space between a constructor/destructor and the open paren sp_func_class_paren = ignore # ignore/add/remove/force # Add or remove space between 'return' and '(' sp_return_paren = ignore # ignore/add/remove/force # Add or remove space between '__attribute__' and '(' sp_attribute_paren = ignore # ignore/add/remove/force # Add or remove space between 'defined' and '(' in '#if defined (FOO)' sp_defined_paren = ignore # ignore/add/remove/force # Add or remove space between 'throw' and '(' in 'throw (something)' sp_throw_paren = ignore # ignore/add/remove/force # Add or remove space between macro and value sp_macro = ignore # ignore/add/remove/force # Add or remove space between macro function ')' and value sp_macro_func = ignore # ignore/add/remove/force # Add or remove space between 'else' and '{' if on the same line sp_else_brace = force # ignore/add/remove/force # Add or remove space between '}' and 'else' if on the same line sp_brace_else = force # ignore/add/remove/force # Add or remove space between '}' and the name of a typedef on the same line sp_brace_typedef = ignore # ignore/add/remove/force # Add or remove space between 'catch' and '{' if on the same line sp_catch_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'catch' if on the same line sp_brace_catch = ignore # ignore/add/remove/force # Add or remove space between 'finally' and '{' if on the same line sp_finally_brace = ignore # ignore/add/remove/force # Add or remove space between '}' and 'finally' if on the same line sp_brace_finally = ignore # ignore/add/remove/force # Add or remove space between 'try' and '{' if on the same line sp_try_brace = ignore # ignore/add/remove/force # Add or remove space between get/set and '{' if on the same line sp_getset_brace = ignore # ignore/add/remove/force # Add or remove space before the '::' operator sp_before_dc = ignore # ignore/add/remove/force # Add or remove space after the '::' operator sp_after_dc = ignore # ignore/add/remove/force # Add or remove around the D named array initializer ':' operator sp_d_array_colon = ignore # ignore/add/remove/force # Add or remove space after the '!' (not) operator. sp_not = remove # ignore/add/remove/force # Add or remove space after the '~' (invert) operator. sp_inv = remove # ignore/add/remove/force # Add or remove space after the '&' (address-of) operator. # This does not affect the spacing after a '&' that is part of a type. sp_addr = remove # ignore/add/remove/force # Add or remove space around the '.' or '->' operators sp_member = remove # ignore/add/remove/force # Add or remove space after the '*' (dereference) operator. # This does not affect the spacing after a '*' that is part of a type. sp_deref = remove # ignore/add/remove/force # Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7' sp_sign = remove # ignore/add/remove/force # Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;' sp_incdec = remove # ignore/add/remove/force # Add or remove space before a backslash-newline at the end of a line sp_before_nl_cont = add # ignore/add/remove/force # Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;' sp_after_oc_scope = ignore # ignore/add/remove/force # Add or remove space after the colon in message specs # '-(int) f:(int) x;' vs '-(int) f: (int) x;' sp_after_oc_colon = ignore # ignore/add/remove/force # Add or remove space before the colon in message specs # '-(int) f: (int) x;' vs '-(int) f : (int) x;' sp_before_oc_colon = ignore # ignore/add/remove/force # Add or remove space after the colon in message specs # '[object setValue:1];' vs '[object setValue: 1];' sp_after_send_oc_colon = ignore # ignore/add/remove/force # Add or remove space before the colon in message specs # '[object setValue:1];' vs '[object setValue :1];' sp_before_send_oc_colon = ignore # ignore/add/remove/force # Add or remove space after the (type) in message specs # '-(int) f: (int) x;' vs '-(int) f: (int)x;' sp_after_oc_type = ignore # ignore/add/remove/force # Add or remove space around the ':' in 'b ? t : f' sp_cond_colon = ignore # ignore/add/remove/force # Add or remove space around the '?' in 'b ? t : f' sp_cond_question = ignore # ignore/add/remove/force # Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here. sp_case_label = ignore # ignore/add/remove/force # Control the space around the D '..' operator. sp_range = ignore # ignore/add/remove/force # Control the space after the opening of a C++ comment '// A' vs '//A' sp_cmt_cpp_start = ignore # ignore/add/remove/force # # Code alignment (not left column spaces/tabs) # # Whether to keep non-indenting tabs align_keep_tabs = false # false/true # Whether to use tabs for alinging align_with_tabs = false # false/true # Whether to bump out to the next tab when aligning align_on_tabstop = false # false/true # Whether to left-align numbers align_number_left = false # false/true # Align variable definitions in prototypes and functions align_func_params = false # false/true # Align parameters in single-line functions that have the same name. # The function names must already be aligned with each other. align_same_func_call_params = false # false/true # The span for aligning variable definitions (0=don't align) align_var_def_span = 0 # number # How to align the star in variable definitions. # 0=Part of the type 'void * foo;' # 1=Part of the variable 'void *foo;' # 2=Dangling 'void *foo;' align_var_def_star_style = 0 # number # How to align the '&' in variable definitions. # 0=Part of the type # 1=Part of the variable # 2=Dangling align_var_def_amp_style = 0 # number # The threshold for aligning variable definitions (0=no limit) align_var_def_thresh = 0 # number # The gap for aligning variable definitions align_var_def_gap = 0 # number # Whether to align the colon in struct bit fields align_var_def_colon = false # false/true # Whether to align inline struct/enum/union variable definitions align_var_def_inline = false # false/true # The span for aligning on '=' in assignments (0=don't align) align_assign_span = 0 # number # The threshold for aligning on '=' in assignments (0=no limit) align_assign_thresh = 0 # number # The span for aligning on '=' in enums (0=don't align) align_enum_equ_span = 0 # number # The threshold for aligning on '=' in enums (0=no limit) align_enum_equ_thresh = 0 # number # The span for aligning struct/union (0=don't align) align_var_struct_span = 0 # number # The threshold for aligning struct/union member definitions (0=no limit) align_var_struct_thresh = 0 # number # The gap for aligning struct/union member definitions align_var_struct_gap = 0 # number # The span for aligning struct initializer values (0=don't align) align_struct_init_span = 0 # number # The minimum space between the type and the synonym of a typedef align_typedef_gap = 0 # number # The span for aligning single-line typedefs (0=don't align) align_typedef_span = 0 # number # How to align typedef'd functions with other typedefs # 0: Don't mix them at all # 1: align the open paren with the types # 2: align the function type name with the other type names align_typedef_func = 0 # number # Controls the positioning of the '*' in typedefs. Just try it. # 0: Align on typdef type, ignore '*' # 1: The '*' is part of type name: typedef int *pint; # 2: The '*' is part of the type, but dangling: typedef int *pint; align_typedef_star_style = 0 # number # Controls the positioning of the '&' in typedefs. Just try it. # 0: Align on typdef type, ignore '&' # 1: The '&' is part of type name: typedef int &pint; # 2: The '&' is part of the type, but dangling: typedef int &pint; align_typedef_amp_style = 0 # number # The span for aligning comments that end lines (0=don't align) align_right_cmt_span = 0 # number # If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment align_right_cmt_mix = false # false/true # If a trailing comment is more than this number of columns away from the text it follows, # it will qualify for being aligned. align_right_cmt_gap = 0 # number # The span for aligning function prototypes (0=don't align) align_func_proto_span = 0 # number # Minimum gap between the return type and the function name. align_func_proto_gap = 0 # number # Align function protos on the 'operator' keyword instead of what follows align_on_operator = false # false/true # Whether to mix aligning prototype and variable declarations. # If true, align_var_def_XXX options are used instead of align_func_proto_XXX options. align_mix_var_proto = false # false/true # Align single-line functions with function prototypes, uses align_func_proto_span align_single_line_func = false # false/true # Aligning the open brace of single-line functions. # Requires align_single_line_func=true, uses align_func_proto_span align_single_line_brace = false # false/true # Gap for align_single_line_brace. align_single_line_brace_gap = 0 # number # The span for aligning ObjC msg spec (0=don't align) align_oc_msg_spec_span = 0 # number # Whether to align macros wrapped with a backslash and a newline. # This will not work right if the macro contains a multi-line comment. align_nl_cont = false # false/true # The minimum space between label and value of a preprocessor define align_pp_define_gap = 0 # number # The span for aligning on '#define' bodies (0=don't align) align_pp_define_span = 0 # number # Align lines that start with '<<' with previous '<<'. Default=true align_left_shift = true # false/true # # Newline adding and removing options # # Whether to collapse empty blocks between '{' and '}' nl_collapse_empty_body = false # false/true # Don't split one-line braced assignments - 'foo_t f = { 1, 2 };' nl_assign_leave_one_liners = false # false/true # Don't split one-line braced statements inside a class xx { } body nl_class_leave_one_liners = false # false/true # Don't split one-line enums: 'enum foo { BAR = 15 };' nl_enum_leave_one_liners = false # false/true # Don't split one-line get or set functions nl_getset_leave_one_liners = false # false/true # Don't split one-line function definitions - 'int foo() { return 0; }' nl_func_leave_one_liners = false # false/true # Don't split one-line if/else statements - 'if(a) b++;' nl_if_leave_one_liners = false # false/true # Add or remove newlines at the start of the file nl_start_of_file = ignore # ignore/add/remove/force # The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force' nl_start_of_file_min = 0 # number # Add or remove newline at the end of the file nl_end_of_file = ignore # ignore/add/remove/force # The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force') nl_end_of_file_min = 0 # number # Add or remove newline between '=' and '{' nl_assign_brace = ignore # ignore/add/remove/force # Add or remove newline between '=' and '[' (D only) nl_assign_square = ignore # ignore/add/remove/force # Add or remove newline after '= [' (D only). Will also affect the newline before the ']' nl_after_square_assign = ignore # ignore/add/remove/force # The number of newlines after a block of variable definitions nl_func_var_def_blk = 0 # number # Add or remove newline between a function call's ')' and '{', as in: # list_for_each(item, &list) { } nl_fcall_brace = ignore # ignore/add/remove/force # Add or remove newline between 'enum' and '{' nl_enum_brace = ignore # ignore/add/remove/force # Add or remove newline between 'struct and '{' nl_struct_brace = ignore # ignore/add/remove/force # Add or remove newline between 'union' and '{' nl_union_brace = ignore # ignore/add/remove/force # Add or remove newline between 'if' and '{' nl_if_brace = remove # ignore/add/remove/force # Add or remove newline between '}' and 'else' nl_brace_else = remove # ignore/add/remove/force # Add or remove newline between 'else if' and '{' # If set to ignore, nl_if_brace is used instead nl_elseif_brace = remove # ignore/add/remove/force # Add or remove newline between 'else' and '{' nl_else_brace = remove # ignore/add/remove/force # Add or remove newline between 'else' and 'if' nl_else_if = ignore # ignore/add/remove/force # Add or remove newline between '}' and 'finally' nl_brace_finally = ignore # ignore/add/remove/force # Add or remove newline between 'finally' and '{' nl_finally_brace = ignore # ignore/add/remove/force # Add or remove newline between 'try' and '{' nl_try_brace = ignore # ignore/add/remove/force # Add or remove newline between get/set and '{' nl_getset_brace = ignore # ignore/add/remove/force # Add or remove newline between 'for' and '{' nl_for_brace = add # ignore/add/remove/force # Add or remove newline between 'catch' and '{' nl_catch_brace = ignore # ignore/add/remove/force # Add or remove newline between '}' and 'catch' nl_brace_catch = ignore # ignore/add/remove/force # Add or remove newline between 'while' and '{' nl_while_brace = ignore # ignore/add/remove/force # Add or remove newline between 'do' and '{' nl_do_brace = ignore # ignore/add/remove/force # Add or remove newline between '}' and 'while' of 'do' statement nl_brace_while = ignore # ignore/add/remove/force # Add or remove newline between 'switch' and '{' nl_switch_brace = add # ignore/add/remove/force # Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc. # Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace. nl_multi_line_cond = false # false/true # Force a newline in a define after the macro name for multi-line defines. nl_multi_line_define = false # false/true # Whether to put a newline before 'case' statement nl_before_case = false # false/true # Add or remove newline between ')' and 'throw' nl_before_throw = ignore # ignore/add/remove/force # Whether to put a newline after 'case' statement nl_after_case = false # false/true # Newline between namespace and { nl_namespace_brace = ignore # ignore/add/remove/force # Add or remove newline between 'template<>' and whatever follows. nl_template_class = ignore # ignore/add/remove/force # Add or remove newline between 'class' and '{' nl_class_brace = ignore # ignore/add/remove/force # Add or remove newline after each ',' in the constructor member initialization nl_class_init_args = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in definition nl_func_type_name = ignore # ignore/add/remove/force # Add or remove newline between function scope and name in a definition # Controls the newline after '::' in 'void A::f() { }' nl_func_scope_name = ignore # ignore/add/remove/force # Add or remove newline between return type and function name in a prototype nl_func_proto_type_name = ignore # ignore/add/remove/force # Add or remove newline between a function name and the opening '(' nl_func_paren = ignore # ignore/add/remove/force # Add or remove newline after '(' in a function declaration nl_func_decl_start = ignore # ignore/add/remove/force # Add or remove newline after each ',' in a function declaration nl_func_decl_args = ignore # ignore/add/remove/force # Add or remove newline before the ')' in a function declaration nl_func_decl_end = ignore # ignore/add/remove/force # Add or remove newline between function signature and '{' nl_fdef_brace = ignore # ignore/add/remove/force # Whether to put a newline after 'return' statement nl_after_return = false # false/true # Add or remove a newline between the return keyword and return expression. nl_return_expr = ignore # ignore/add/remove/force # Whether to put a newline after semicolons, except in 'for' statements nl_after_semicolon = false # false/true # Whether to put a newline after brace open. # This also adds a newline before the matching brace close. nl_after_brace_open = false # false/true # If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is # placed between the open brace and a trailing single-line comment. nl_after_brace_open_cmt = false # false/true # Whether to put a newline after a virtual brace open. # These occur in un-braced if/while/do/for statement bodies. nl_after_vbrace_open = false # false/true # Whether to put a newline after a brace close. # Does not apply if followed by a necessary ';'. nl_after_brace_close = false # false/true # Whether to alter newlines in '#define' macros nl_define_macro = false # false/true # Whether to not put blanks after '#ifxx', '#elxx', or before '#endif' nl_squeeze_ifdef = false # false/true # Add or remove newline before 'if' nl_before_if = ignore # ignore/add/remove/force # Add or remove newline after 'if' nl_after_if = ignore # ignore/add/remove/force # Add or remove newline before 'for' nl_before_for = ignore # ignore/add/remove/force # Add or remove newline after 'for' nl_after_for = ignore # ignore/add/remove/force # Add or remove newline before 'while' nl_before_while = ignore # ignore/add/remove/force # Add or remove newline after 'while' nl_after_while = ignore # ignore/add/remove/force # Add or remove newline before 'switch' nl_before_switch = ignore # ignore/add/remove/force # Add or remove newline after 'switch' nl_after_switch = ignore # ignore/add/remove/force # Add or remove newline before 'do' nl_before_do = ignore # ignore/add/remove/force # Add or remove newline after 'do' nl_after_do = ignore # ignore/add/remove/force # Whether to double-space commented-entries in struct/enum nl_ds_struct_enum_cmt = false # false/true # Whether to double-space before the close brace of a struct/union/enum nl_ds_struct_enum_close_brace = false # false/true # Add or remove a newline around a class colon. # Related to pos_class_colon, nl_class_init_args, and pos_comma. nl_class_colon = ignore # ignore/add/remove/force # Change simple unbraced if statements into a one-liner # 'if(b)\n i++;' => 'if(b) i++;' nl_create_if_one_liner = false # false/true # Change simple unbraced for statements into a one-liner # 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);' nl_create_for_one_liner = false # false/true # Change simple unbraced while statements into a one-liner # 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);' nl_create_while_one_liner = false # false/true # # Positioning options # # The position of arithmetic operators in wrapped expressions pos_arith = ignore # ignore/lead/trail # The position of assignment in wrapped expressions pos_assign = ignore # ignore/lead/trail # The position of boolean operators in wrapped expressions pos_bool = ignore # ignore/lead/trail # The position of the comma in wrapped expressions pos_comma = ignore # ignore/lead/trail # The position of the comma in the constructor initialization list pos_class_comma = ignore # ignore/lead/trail # The position of colons between constructor and member initialization pos_class_colon = ignore # ignore/lead/trail # # Line Splitting options # # Try to limit code width to N number of columns code_width = 0 # number # Whether to fully split long 'for' statements at semi-colons ls_for_split_full = false # false/true # Whether to fully split long function protos/calls at commas ls_func_split_full = false # false/true # # Blank line options # # The maximum consecutive newlines nl_max = 0 # number # The number of newlines after a function prototype, if followed by another function prototype nl_after_func_proto = 0 # number # The number of newlines after a function prototype, if not followed by another function prototype nl_after_func_proto_group = 0 # number # The number of newlines after '}' of a multi-line function body nl_after_func_body = 0 # number # The number of newlines after '}' of a single line function body nl_after_func_body_one_liner = 0 # number # The minimum number of newlines before a multi-line comment. # Doesn't apply if after a brace open or another multi-line comment. nl_before_block_comment = 0 # number # The minimum number of newlines before a single-line C comment. # Doesn't apply if after a brace open or other single-line C comments. nl_before_c_comment = 0 # number # The minimum number of newlines before a CPP comment. # Doesn't apply if after a brace open or other CPP comments. nl_before_cpp_comment = 0 # number # Whether to force a newline after a mulit-line comment. nl_after_multiline_comment = false # false/true # The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. # Will not change the newline count if after a brace open. # 0 = No change. nl_before_access_spec = 0 # number # The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label. # 0 = No change. nl_after_access_spec = 0 # number # The number of newlines between a function def and the function comment. # 0 = No change. nl_comment_func_def = 0 # number # The number of newlines after a try-catch-finally block that isn't followed by a brace close. # 0 = No change. nl_after_try_catch_finally = 0 # number # The number of newlines before and after a property, indexer or event decl. # 0 = No change. nl_around_cs_property = 0 # number # The number of newlines between the get/set/add/remove handlers in C#. # 0 = No change. nl_between_get_set = 0 # number # Whether to remove blank lines after '{' eat_blanks_after_open_brace = false # false/true # Whether to remove blank lines before '}' eat_blanks_before_close_brace = false # false/true # # Code modifying options (non-whitespace) # # Add or remove braces on single-line 'do' statement mod_full_brace_do = ignore # ignore/add/remove/force # Add or remove braces on single-line 'for' statement mod_full_brace_for = ignore # ignore/add/remove/force # Add or remove braces on single-line function defintions. (Pawn) mod_full_brace_function = ignore # ignore/add/remove/force # Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'. mod_full_brace_if = ignore # ignore/add/remove/force # Don't remove braces around statements that span N newlines mod_full_brace_nl = 0 # number # Add or remove braces on single-line 'while' statement mod_full_brace_while = ignore # ignore/add/remove/force # Add or remove unnecessary paren on 'return' statement mod_paren_on_return = ignore # ignore/add/remove/force # Whether to change optional semicolons to real semicolons mod_pawn_semicolon = false # false/true # Add parens on 'while' and 'if' statement around bools mod_full_paren_if_bool = false # false/true # Whether to remove superfluous semicolons mod_remove_extra_semicolon = false # false/true # If a function body exceeds the specified number of newlines and doesn't have a comment after # the close brace, a comment will be added. mod_add_long_function_closebrace_comment = 0 # number # If a switch body exceeds the specified number of newlines and doesn't have a comment after # the close brace, a comment will be added. mod_add_long_switch_closebrace_comment = 0 # number # If TRUE, will sort consecutive single-line 'import' statements [Java, D] mod_sort_import = false # false/true # If TRUE, will sort consecutive single-line 'using' statements [C#] mod_sort_using = false # false/true # If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C] # This is generally a bad idea, as it may break your code. mod_sort_include = false # false/true # If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace. mod_move_case_break = false # false/true # If TRUE, it will remove a void 'return;' that appears as the last statement in a function. mod_remove_empty_return = false # false/true # # Comment modifications # # Try to wrap comments at cmt_width columns cmt_width = 0 # number # If false, disable all multi-line comment changes, including cmt_width and leading chars. # Default is true. cmt_indent_multi = true # false/true # Whether to group c-comments that look like they are in a block cmt_c_group = true # false/true # Whether to put an empty '/*' on the first line of the combined c-comment cmt_c_nl_start = false # false/true # Whether to put a newline before the closing '*/' of the combined c-comment cmt_c_nl_end = false # false/true # Whether to group cpp-comments that look like they are in a block cmt_cpp_group = true # false/true # Whether to put an empty '/*' on the first line of the combined cpp-comment cmt_cpp_nl_start = false # false/true # Whether to put a newline before the closing '*/' of the combined cpp-comment cmt_cpp_nl_end = false # false/true # Whether to change cpp-comments into c-comments cmt_cpp_to_c = true # false/true # Whether to put a star on subsequent comment lines cmt_star_cont = true # false/true # The number of spaces to insert at the start of subsequent comment lines cmt_sp_before_star_cont = 0 # number # The number of spaces to insert after the star on subsequent comment lines cmt_sp_after_star_cont = 0 # number # For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of # the comment are the same length. Default=True cmt_multi_check_last = true # false/true # The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment. # Will substitue $(filename) with the current file's name. cmt_insert_file_header = "" # string # The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment. # Will substitue $(filename) with the current file's name. cmt_insert_file_footer = "" # string # The filename that contains text to insert before a function implementation if the function isn't preceeded with a C/C++ comment. # Will substitue $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff. # Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... } cmt_insert_func_header = "" # string # The filename that contains text to insert before a class if the class isn't preceeded with a C/C++ comment. # Will substitue $(class) with the class name. cmt_insert_class_header = "" # string # If a preprocessor is encountered when stepping backwards from a function name, then # this option decides whether the comment should be inserted. # Affects cmt_insert_func_header and cmt_insert_class_header. cmt_insert_before_preproc = false # false/true # # Preprocessor options # # Control indent of preprocessors inside #if blocks at brace level 0 pp_indent = ignore # ignore/add/remove/force # Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false) pp_indent_at_level = false # false/true # If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1. pp_indent_count = 1 # number # Add or remove space after # based on pp_level of #if blocks pp_space = ignore # ignore/add/remove/force # Sets the number of spaces added with pp_space pp_space_count = 0 # number # The indent for #region and #endregion in C# and '#pragma region' in C/C++ pp_indent_region = 0 # number # Whether to indent the code between #region and #endregion pp_region_indent_code = false # false/true # If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level pp_indent_if = 0 # number # Control whether to indent the code between #if, #else and #endif when not at file-level pp_if_indent_code = false # false/true # Whether to indent '#define' at the brace level (true) or from column 1 (false) pp_define_at_level = false # false/true # You can force a token to be a type with the 'type' option. # Example: # type myfoo1 myfoo2 # # You can create custom macro-based indentation using macro-open, # macro-else and macro-close. # Example: # macro-open BEGIN_TEMPLATE_MESSAGE_MAP # macro-open BEGIN_MESSAGE_MAP # macro-close END_MESSAGE_MAP # # You can assign any keyword to any type with the set option. # set func_call_user _ N_ osm-gps-map-1.2.2/website/000077500000000000000000000000001526276210300153225ustar00rootroot00000000000000osm-gps-map-1.2.2/website/Gemfile000066400000000000000000000001731526276210300166160ustar00rootroot00000000000000source "https://rubygems.org" gem "jekyll", "~> 4.4" gem "jekyll-theme-midnight", "~> 0.2" gem "jekyll-seo-tag", "~> 2.8" osm-gps-map-1.2.2/website/Gemfile.lock000066400000000000000000000107611526276210300175510ustar00rootroot00000000000000GEM remote: https://rubygems.org/ specs: addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) base64 (0.3.0) bigdecimal (4.1.2) colorator (1.1.0) concurrent-ruby (1.3.8) csv (3.3.6) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) ffi (1.17.4) ffi (1.17.4-aarch64-linux-gnu) ffi (1.17.4-aarch64-linux-musl) ffi (1.17.4-arm-linux-gnu) ffi (1.17.4-arm-linux-musl) ffi (1.17.4-arm64-darwin) ffi (1.17.4-x86-linux-gnu) ffi (1.17.4-x86-linux-musl) ffi (1.17.4-x86_64-darwin) ffi (1.17.4-x86_64-linux-gnu) ffi (1.17.4-x86_64-linux-musl) forwardable-extended (2.6.0) google-protobuf (4.36.1) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-aarch64-linux-gnu) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-aarch64-linux-musl) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-arm64-darwin) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-x86-linux-gnu) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-x86-linux-musl) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-x86_64-darwin) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-x86_64-linux-gnu) bigdecimal rake (~> 13.3) google-protobuf (4.36.1-x86_64-linux-musl) bigdecimal rake (~> 13.3) http_parser.rb (0.8.1) i18n (1.15.2) concurrent-ruby (~> 1.0) jekyll (4.4.1) addressable (~> 2.4) base64 (~> 0.2) colorator (~> 1.0) csv (~> 3.0) em-websocket (~> 0.5) i18n (~> 1.0) jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) json (~> 2.6) kramdown (~> 2.3, >= 2.3.1) kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) mercenary (~> 0.3, >= 0.3.6) pathutil (~> 0.9) rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) terminal-table (>= 1.8, < 4.0) webrick (~> 1.7) jekyll-sass-converter (3.1.0) sass-embedded (~> 1.75) jekyll-seo-tag (2.9.0) jekyll (>= 3.8, < 5.0) jekyll-theme-midnight (0.2.0) jekyll (> 3.5, < 5.0) jekyll-seo-tag (~> 2.0) jekyll-watch (2.2.1) listen (~> 3.0) json (2.21.2) kramdown (2.5.2) rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.4) listen (3.10.0) logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) mercenary (0.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (7.0.5) rake (13.4.2) rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) rexml (3.4.4) rouge (4.7.0) safe_yaml (1.0.5) sass-embedded (1.104.0) google-protobuf (~> 4.31) rake (>= 13) sass-embedded (1.104.0-aarch64-linux-android) google-protobuf (~> 4.31) sass-embedded (1.104.0-aarch64-linux-gnu) google-protobuf (~> 4.31) sass-embedded (1.104.0-aarch64-linux-musl) google-protobuf (~> 4.31) sass-embedded (1.104.0-arm-linux-androideabi) google-protobuf (~> 4.31) sass-embedded (1.104.0-arm-linux-gnueabihf) google-protobuf (~> 4.31) sass-embedded (1.104.0-arm-linux-musleabihf) google-protobuf (~> 4.31) sass-embedded (1.104.0-arm64-darwin) google-protobuf (~> 4.31) sass-embedded (1.104.0-riscv64-linux-android) google-protobuf (~> 4.31) sass-embedded (1.104.0-riscv64-linux-gnu) google-protobuf (~> 4.31) sass-embedded (1.104.0-riscv64-linux-musl) google-protobuf (~> 4.31) sass-embedded (1.104.0-x86_64-darwin) google-protobuf (~> 4.31) sass-embedded (1.104.0-x86_64-linux-android) google-protobuf (~> 4.31) sass-embedded (1.104.0-x86_64-linux-gnu) google-protobuf (~> 4.31) sass-embedded (1.104.0-x86_64-linux-musl) google-protobuf (~> 4.31) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) unicode-display_width (2.6.0) webrick (1.9.2) PLATFORMS aarch64-linux-android aarch64-linux-gnu aarch64-linux-musl arm-linux-androideabi arm-linux-gnu arm-linux-gnueabihf arm-linux-musl arm-linux-musleabihf arm64-darwin riscv64-linux-android riscv64-linux-gnu riscv64-linux-musl ruby x86-linux-gnu x86-linux-musl x86_64-darwin x86_64-linux-android x86_64-linux-gnu x86_64-linux-musl DEPENDENCIES jekyll (~> 4.4) jekyll-seo-tag (~> 2.8) jekyll-theme-midnight (~> 0.2) BUNDLED WITH 2.6.9 osm-gps-map-1.2.2/website/_config.yml000066400000000000000000000011551526276210300174530ustar00rootroot00000000000000title: osm-gps-map tagline: A Gtk+ Widget for Displaying OpenStreetMap tiles. description: A Gtk+ widget (and Python bindings) for displaying OpenStreetMap tiles. theme: jekyll-theme-midnight url: https://nzjrs.github.io baseurl: /osm-gps-map show_downloads: true plugins: - jekyll-seo-tag github: repository_url: https://github.com/nzjrs/osm-gps-map owner_url: https://github.com/nzjrs owner_name: nzjrs zip_url: https://github.com/nzjrs/osm-gps-map/archive/refs/heads/master.zip tar_url: https://github.com/nzjrs/osm-gps-map/archive/refs/heads/master.tar.gz exclude: - Gemfile - Gemfile.lock - vendor osm-gps-map-1.2.2/website/_data/000077500000000000000000000000001526276210300163725ustar00rootroot00000000000000osm-gps-map-1.2.2/website/_data/releases.json000066400000000000000000000004601526276210300210700ustar00rootroot00000000000000{ "repo": "nzjrs/osm-gps-map", "clone_url": "https://github.com/nzjrs/osm-gps-map.git", "master_tar": "https://github.com/nzjrs/osm-gps-map/archive/refs/heads/master.tar.gz", "master_zip": "https://github.com/nzjrs/osm-gps-map/archive/refs/heads/master.zip", "latest": null, "archives": [] } osm-gps-map-1.2.2/website/index.md000066400000000000000000000117331526276210300167600ustar00rootroot00000000000000--- layout: default permalink: / --- {% if site.data.releases.latest %}

Download {{ site.data.releases.latest.tag }} archive (Release notes for {{ site.data.releases.latest.tag }}).

{% else %}

No GitHub Release yet. Tag-only publishes gtk-doc; Download fills in when a Release exists.

{% endif %} A Gtk+ widget (and Python bindings) that when given GPS co-ordinates, draws a GPS track, and points of interest on a moving map display. Downloads map data from a number of websites, including openstreetmap.org. The library has excellent performance and is currently used in a number of Gtk+ applications. ![osm-gps-map showing an OpenStreetMap track in Christchurch]({{ '/screenshot.png' | relative_url }}) ![osm-gps-map with on-screen display over satellite imagery]({{ '/screenshot-osd.png' | relative_url }}) Currently supports a number of different mapping sources: - OpenStreetMap (default) - OpenTopoMap - OpenCycleMap - Maps-For-Free - Google Maps / Satellite and Bing Maps (Virtual Earth) It also has the following features: - Intelligent, flexible and customizable caching of maps, including the ability to request a specific area of the map to be cached ahead of time - Recording of points of interest on the map (and the ability to add arbitrary pixmaps at those points) - Automatically draws a GPS track (a line showing the history of past added points) - Automatic centering on new GPS points - Support for multiple other tracks of co-ordinate points - Adjustable Zoom - Built in support for keyboard navigation - Includes a [set of examples](https://github.com/{{ site.data.releases.repo }}/tree/master/examples/) - Simple, [flat API](https://github.com/{{ site.data.releases.repo }}/blob/master/src/osm-gps-map-widget.h) - Support for showing additional display layers rendered on top of the map - Optional on screen display (OSD) - Proper map copyright attribution and user-agent usage to comply with various map requirements ## Documentation - [API Documentation]({{ '/docs/reference/html/index.html' | relative_url }}) - Code examples - [mapviewer.c](https://github.com/{{ site.data.releases.repo }}/blob/master/examples/mapviewer.c) - [mapviewer.py](https://github.com/{{ site.data.releases.repo }}/blob/master/examples/mapviewer.py) - [mapviewer.js](https://github.com/{{ site.data.releases.repo }}/blob/master/examples/mapviewer.js) (JavaScript example using GObject Introspection) - [polygon.c](https://github.com/{{ site.data.releases.repo }}/blob/master/examples/polygon.c) (small polygon-on-map drawing example) - [editable_track.c](https://github.com/{{ site.data.releases.repo }}/blob/master/examples/editable_track.c) (small example of an editable track feature) - Please e-mail the [mailing list](https://groups.google.com/group/osm-gps-map) for all questions. - Report issues using the canonical [issue tracker](https://github.com/nzjrs/osm-gps-map/issues) ## Install Instructions osm-gps-map should be packaged by your distribution. On Debian, Ubuntu or similar, you can install the GTK+ library and its Python bindings like this: ``` sudo apt install libosmgpsmap-1.0-1 gir1.2-osmgpsmap-1.0 python3-gi ``` And if you want to build some application that depends on osm-gps-map, you can install the development files like this: ``` sudo apt install libosmgpsmap-1.0-dev ``` ### Installing From Source To build from source on Debian or Ubuntu you will need: ``` sudo apt install build-essential autoconf automake libtool \ libgtk-3-dev libsoup-3.0-dev libgirepository1.0-dev ``` Then: ``` ./autogen.sh && make && sudo make install ``` {% if site.data.releases.latest and site.data.releases.latest.changes.size > 0 %} ## News

Changes in {{ site.data.releases.latest.tag }} ({{ site.data.releases.latest.date }})

    {% for item in site.data.releases.latest.changes %}
  • {{ item }}
  • {% endfor %}
{% endif %} ## Download You may download any of the following archives: {% if site.data.releases.archives.size > 0 %} {% else %}
  • (no GitHub Releases yet)
{% endif %} You can also clone the project with [Git](https://git-scm.com) by running: ``` $ git clone {{ site.data.releases.clone_url }} ``` A snapshot of master is also available as [tar]({{ site.data.releases.master_tar }}) or [zip]({{ site.data.releases.master_zip }}). ## License - GPLv2+ ## Authors - John Stowers - Till Harbaum - Alberto Mardegan - Mark Cottrell - Originally based on tangoGPS by Marcus Bauer ## Contact - osm-gps-map [mailing list](https://groups.google.com/group/osm-gps-map) - Canonical [issue tracker](https://github.com/nzjrs/osm-gps-map/issues) get the source code on GitHub : [{{ site.data.releases.repo }}](https://github.com/{{ site.data.releases.repo }}) osm-gps-map-1.2.2/website/screenshot-osd.png000066400000000000000000011017541526276210300210010ustar00rootroot00000000000000‰PNG  IHDR »…'AsBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœì½yÔíYYç÷ÙÃo:ó9ï|ç[UPÕ%-¢PÚ­F°4&v'®´M§¤ãj[0 ;Æt:A�ŠY¦ jºÅD‰i‰#J» ¬™šï|ßù=ÃoÜCþØç¾÷VQE•Pˆ”ç»Ö¹çžóžßþíß´¿Ïó|Ÿ½X`�X`�X`�X`�X`�X`�Xàùñ ß?Óû ,°À <ü3½ë§ØHð}¿ê”R8çðÆ@¬¸í¾wQ{ºÀ ,°À—'î¸þµHÎ9p.¸(¿þÏ;²ñ€{Ò»x*ïqÎ!„àUÿ_ù•_ùE?ˆX`�¾ ññ÷ðá¾ /%RJ ¤Âq€}Ò»ãi= À;Ç«ün¾ùfüñ/ú1,°À ,ðå‡+<Á½ÿ–;Nþ#¼R�pÌ5ïbþîñ”�Œ4¯¼÷_sêÔ)677¿ø½_`�XàËWxâÔ©SðØÿÁ×ýg< ( ájîÀaXî)= ïýá‡kÿ¿À ,°ÀÏE¸à5|6ù¸ùgñTÙlê¶Ûn3£Ñ诧§ ,°À <¯°»»ËwÜñ  ªkÞ¯ü¿ê§×€žäùüÝ—ßJš&ŸWgŠ¢ä“ÿÔçµí ,°À_–Hy¢çcy¢ôÔ|6¥i›ä¿ù¼zñÓ?óS‹PÞ ,°Àß.¤ó÷+äcæ/Éœ˜žµt?û?ýÌgopM$ïÉÛýׯãS~¿Àórpÿâg¾›S�þ*o|ËŸsð7üòËþËùgÿÃ?彋ÿî—>Ê�ûR÷h�¾ì‘ðDòiäs…€ž½tMÓð¿õ>”R(%QR‚!ðÞãœÇƒµ–ïüŽÿ(LLúí-ðü„¿fγ÷ïA¯½‚WßÚð‘?ü$;öKڽςkÆl^¼HgsLã<‹Ûu�/7üÐý¿ø‹¿øœ´Õn·ù¥_ú%&“ Ýn—üÁd6›=Û}DâÑ„L¸'�<ÝDÔg@š$(­ˆ´BJuè9ç°Î¢•¤iÌÓä8,ð· ×Ýþ�ü×ÝÃÃü7�€üì~~ó-?þ¥îÆ |ÞxÉK^òœµÕn·¹á†xãßÈÛßþvÞøÆ7rôèQzè¡çl?eHJI’ÆD:Bk…R )Äœ|MÓ€çiœýoßGÿ»¾ƒS�ü oø©?cß Ú/øf¾÷»¿•[72ÌÞü¿ñ.Þ{×�ïüéãćø©7ÿÎ�þ~Þþ¦WÒ*>ÊÛßð¿ðÐÆ?â-?þMÈ?þùÑ_”è©ÚøäÞaÕïü ÷¾ä;yÍÊ�¼íMïæ�ê¯ÿZ-ðüÂs1Ö¾ó�ïäG~äG8zô(ozÓ›ØØØàüùó¼ó�ï|ÎÆsùta“«¯Ã ¤$‰cÒ8"Mb²$Ak�µ–ª*išï,IÓn·½£'··x=ß_WVôxï(.<Ä…pgùà{�ßþøöi¶9zû·±vÿïó�Jº×¿šxýmäÿþwùÈ–fõ+¿ƒoAŠ·ãF°ýñ÷ñÞ÷ý{Ë/æ?þÞ×pD]mgxÛ·°þÀïó�-«/-ßukÉG?¶ ê4÷D†W+¼øÅ}¨ïåß?8»¦¿Ú_Áþúÿ”[‡�óûïy/QÝÈ«ÿ«ïã«[—øôÃô®ãt/bpÃu´ì›�àúaD÷ô� ©xøS©Ÿ®�¾8ìãñoÿ>^s4çìc[öK}ͯ/·×ë^÷:Þýîwóîw_]«óÊç7¼á Ÿw»ãñ˜·½ím\¼x‘�� 666¸xñ"o{ÛÛ�Çϸý³Å_ÙBÏ'Ò!È‹œº®9 �P '=+ËK´Úíglo�ç'®½ÞÞU\üÔÇylv;×Ççùø?Èý•fý¶ÈןHXöïú>pv¾ÍÖyÏ{—Íá¶7}5齿Í{~礳—ñŠ|œååásμï¼@®ÃË¿šïX=ÎP{Î]Ù÷¥?ä7ÿÝï±}rÈWýø7rýËVÙýweûöoá…·®“^<ÅKW¡þÔŸò™i—o½¦ïéu_ÇK2ØýÀ{ùÝ�%™ÜÂ+à&¾æzÁ»>yÿ²ÓÜ|¤ÏþMËäwý�Þôn<ÚçÌ‹×Á?Î'Ï䟣�”?4ïcþQ~áG™;'‹çc�çEQ|AãîSmûW%˜gÂ_™€$‚º*±Æ"¤@‡uðx¼óô}–—–IÓôp›ýíÂÕë}Å*âIŸ5+/ÿf^ýáܪÿŒ?:3ÿÑd“±ñ¸ªÄùΕ·È¢‚´è³“|ãk¿‹o¾õ$£L#àäaûäûäÖcóJ`ÐÎpþ‚�í| ·¿è%œ~øŽSó—úfîe×ôO÷ûDÀèÕ?Îÿüê«ÇÕjk¦÷ÝÉ^À±¿˜•l½ÿnîÝÎ7ßr3/:Ã…;yð€ÏÑF|µ�—îæ‘‰cñx<¿ñÃ?üüô¥/}Ê¿Ý{ï½¼ímoû¼Úý¹Ÿû¹ÃÿÿÚ¯ýßó=ßóyµu-ºÝ.o~ó›ÙØØàÂ… 9r„7¿ùͼõ­o=LLøBñW& çU]!…ú�O³µ:-þéù=ìï`LÃûïÿþœí-ðüÄ5üç0³LùœO¿ãûùîk¶‘ƒÓómÜ,-ïÜ“HL²ôÊï㟼êã¿ø_ùÉ÷ïò•¯{ß²ü$²ë­ÓUž¢·B¨'3šúþè.·ßþrþþß!ë{ùГ«‹RyðÞRî�1ÀôŽÍ/ÿÉæ\«r”—÷©‹û¸w¾é¦ñ‚î”=ÇÃÇsz/¸…¿³ {¸—kÑŸ£ w%øíŸ|l ümCžçÏÉøhŒAk�”k¿°,Ÿ×½îu=z”sçÎñÖ·¾€ýÑ娱c¼îu¯ã'ò'¿àþÂçA@ÖZ ¥@)‰”)ÃÓ鈥¥%8rtƒ;?q'um¸û/ïYÐß2xžä™);90ü þÁkÿ ·<øGüö‡.>! á³¶¹ö/×~ö d0zªII|ô¥¼t°s²»òËåWó?Ðaóø×ÒÆpïGÎPøšóþ;·ßÎËo€æSâ�‰ÇŸ¸ïâÁò‰ü%¼â«_Ã+·îàñºÅúFÄ'Þó¾¾À�Ÿ)ù¦¯zëæ>~ûâ„K÷]€¯{G)øÈ�©½§ù\m¤Oç!.ð|ÄÏþìÏ~Ñ÷qç�wÒn·1Æ<ó�Ÿ³ÙŒÏ|æ3üüÏÿü¡·ó–·¼…׿þõÏaÂç‚û¾ñï}ÖwBz½½nŸªj¸ï¾û1Ör÷_ÞÃÅ‹—Ÿ“Î.ð僫„1`ÝeîxïùšøFnüº¯#Þù~û $óÛÌ?‹'Ò¾aóÃÿ'¼íŸñ�ßôÏyÝ ÂïýÑ%¾ãë�k¶cû/Ù:ú5ܺf¸ôá_ãW?¶‡óPŸûs>º{;·�îýÐýL¼G>ißnò)~å-ÿõ÷~;¯ú¯åë¨Ø¹ïÿåÏœÇû‚3Ÿx ÷U7!·îæñ™eúøýlóBVíc|üLŽ÷à?gO>Ö¿Ž«²Àó¿ð ¿ðœµõŽw¼ã³¾�ÇüÄOüÄs¶xêÒÚÑm·ÝV'É×}û¦×|ó^ŠçwÞ÷ñð#sÏ]÷pæÌ¹ç › ,ðì!‡�ù ÿ×=ü.~è_ý)û‹Á}�þZQUwÜqÇ@>Í®ù”ÏÚ*ò’Ÿþ™ŸzÖ¸ëÓw/<Ÿ¾$øì„‡/eoX`�§Ã³& ?ýÐ_ôÎ,°Às�Ã{×/h�þ&ãóÒ€Xào2ìîóßþã?þRwc�x,h�X`�/ ´À ,°À— Z`�XàK‚§% {Ï^ÆÔ5­V‹£G7¨«‚ýý=ý6¦Î ;”Ó ëk|í×~-uQÑí Ù;˜ò»¿÷‡˜2›ÜwÏ}aÍÂ2çÔu'¹ï¾û¸ñÆév»¼ðïÜĹsçèt:ìîïq×]wEkkk¬mlÐíµ9ØŸ�DÚ+¼u<ðàg�Ç,//Sä%Qšqéâ&³Y^¡TBc<‚)5¶©ÑÊ’& !<�m°¦ÆzÃh4âøñãÄiŠ÷‚»ïº�Ù¬ I;TUM¤¬µ8ßg1BxÊ*G)É`Øc4‘¦)=ôMÓ0è ØÚÝ¥“öhœÇ5–¦¨iu:a¹ðÄiVª—S×Ô¦AJ‰”a6}U %�N‡,ËÒ!•áÈÑuº­6L§¢(¤Å<÷eš¦lnn’¦)£Ñˆ½½=’$!–ÙlF«Û¡Ûm£µ¦ÛnÑí¶)Ë’všÑÎ:IF·Óai8¢×îÐä5»ûLªŠÝñÓ|Bã,µi¨ê¥Qš�—3¢4Á9Çdr@U5H ZhŒ‡;?}?JF$±feyı�u²(¢*§‘Tôû}f³Î9’$Ãz�pžñlJÒNh\ÖañóÉ÷ï=Ö9¤”!p"̉<\ ÞSÎJFƒ!çΞç+^ü"Ö×׹箻QW–1s†v·ƒ15³"õÕ¤§,kꦡqžv»M]úýå¬ä¾ûîÃÔ­bŽ=J¯Ó%‰bœ7` MÓÅŠ^w€W1wß}7[[Û\à ôº]œm^¸x¼àÄÉã´ÛmšªÄÃt:¦,k²vJa+¦Å !R…4kp¤iŠR‚8Žqóe¬š�gWéçiUÕc<¾´lïM©«œCGÂY„P¤­ŒÁ G¯×b*—v.0>(­�qƒ�že<ÉQQÂnQEšÁ`À¥KI’„¢®XYY#J4Ó¼ ¯jìîu]²²²hêÚqùò;ÛcÚY‹V¢Iµç`’3žMAtñð£gØÝ+px¢(BÉ„:ÏÙß›Rå†Áh„Öš,IÃCVUxï‰SMÇX×BF_;&“1q‘eNH’VÌ´Ü Y«…÷¡øÞ4/ØÝÙçñóhu:l;‚ŽS¬·ØÆ�uÚ´’‰N {äeIUUëÙÞÝÀG«S`½' "‰u?¿ÉÓ4ÅyÁ`i�YQa›†$‰h·RâX£¼‚&,‹d<øa‰R Ö¤°”ù„Ò4 <Ĥ§±5ÎI\]¡µ$‰3Z­”´•°4ê1+zEC¾× eBÜN�xœihÊZK²VB]xgP‘`Ðï�è’e)ãÙ�¥ß1™chê!±Ž°B¢„&MSšª&ë·Xß8E§› •'Š=×_œéôªÊ“&1ƒa�µ•Iªp¦Á9Ãîöeƒ§NãÒ¥K¬­Ž(Ë’~ûVƳ1ç/œãÄñuFƒ6'O�¢ª*”0¤± RŽá Í�/<�RŠ^¯GÖNˆ´ •)L]!„¦ÕJ¹éÆÓÖ¤‹ã˜YŽ)K$—6wä8kÑR#¤Ä{�µo°†V'£×Éhµf³ Y«…R‚N+ÅzÁhiHUU8Û µÂ9‡1)BmGKÇt{-66ÖXZ’¤ý~ȽT¶"ŸåapŠ2Z½6UÞ€‹¥©=•6H)ñØP4Rˆ@QŠ”�µÔ•ǹ )�vÄdo‚) Î9”Ò€@kÍp8boï¼÷l§Óaww—,Ë8vôçÎ�c´º„R2Ò´Z꺤¶†í½]šª [ß@JIœ¥´Z-Úi›4Î�V‘$›ûûÔu�1/ªüJ)P¡$Æ;”sáIÓ”(ŠðÞÓT³YI¹_ ‚vÚ&Šc,ãi+£�µHµBkMU”8©Ñ*ÆYƒR¡¿Hpœp(ï¯Ö@óþ)K øùo<�d¸´Ä¹3çØØØà¡GÅ9Ç­·ÞÊG?òúý>eiæ×Ï’$ (˜9ÖÒvŠ+g)M�. ¦³{“)UQ“F ÞKVVj†½>:RHÀIEc=ã¼ (ö™åÖ9ªª¢NÓp¼UÅþÞÃá�¦i˜M¦TeŽ”-4‰ö©Jh´gÃØ4_bK8Â㜠ä4ŸYÚ<+ú Uê>ë»'Nüø¥�‰ócª² ®sLSÓÔ3’X!pù„Í­K»{{ÔuMY7$iŠÃ3™N¨‹œ8–Ô¦ÂxÇ¥­K ;»[ÌòI+¡Óëp0Ùá±ÎÅš²*q®á`<¡;XAè°ˆ£s0+JÆã1umq^3çäeÅlBéÂ:IÂÒ°ÏÖöֆ傒$%MZDQ NPU5RG€`oï€GyŒYž#¥¢,²,AG¡öQ+m“ÄÞ ¼WL§9gÏŸ§,’´…µž2/ˆdÄÆÚŽ®%ÙŸ•lï�Or&SfE…ñÐ8‡Cà (�ñƒ%‘*Bê©‘Ö$‰&NJ_X‹÷.x1I„Цi�"�—@0Ë â(awoŸ¦®ÂÃ+CQB×4¤J1Ù?@âhÅš¥a�åå%Nž*ÒŒ§¬³Äið*®ˆOôp®’ ÀÜ8ü|åß8JH²Œº®™ŒÇH!hw:$IÄd:†ùÚšÎYœ÷xum0¦™ïCà¬ÃG’$ØÆ²yy‹zRã°DZÓN3²4 ûônnPhŒu€¤ÕîÒëõ±ÖqæÌY¶·wˆ"M–eä³)J*lc¨›Š$IètÛ´Ò¥5ÆY¬µèùÚŸÖÄÜðós~Å(BÐÌgΜù-®–â~òËæsj@‡u~ÊákŒ­Ûš^'A)Á ßE`�ðÞÑK»3@GP›¥=JZºý„C¢xäìÃh­E’§OPUkkkH-X]]&N"´Ö8ç8{öq£YY]"鮲¹¹Ãl’£¼ÁTe ¬ÆKCYy’D³±±Ê‘õ%¾ÎÉbAÚn1™•4ΓÏJÒ¤…îiâ( Ò4'iex/ØßßçìÙ³ ³" ºJ¯Ò¶(Ë)b<g-qÑëèõTµa{{7 þÞqúø ’$e6Ë9˜N8¿½ÅãçÏQU ÞX”NÐiе–YU£Ó „¥ÞáŒÀ¬(!°&XªBΧñá-‰T’º.Q*C¸pí’$a8âŒÃZOQ|SBÓ µ¤1 U]¡i÷:\ËÍh<G0@h‰pŽX T±4ê�O/€/I“ˆ¨Û&Ñšv+e8êÐëtÐZbLM”ÆÄqŒÔŠ¥åQSVçBX`6³S⼌�Á C«�°´ÜŸ‡ðr<ëö÷÷�F´²ë¢Hã¼ ƒ�|«ªB)ÅåË—é÷ûìïÓëõ˜Œ§=z”¥á€ýý}œsxc‘R‘Ïf¤iÊx<¦˜L‰Ò[ZÑ4 eY2.xÕÖZt¤(JGc*„¬­ö�'¬­­0èÙߟrîìevö°6\§"/IÒ˜ååIqúºSsϰ‡iJÆã)ã Þ[²Dak�RžªªÈ’,„›tJ·×b8ì³¼<¢ÕNðÞQ×àƒgÔípúôIVW f³‚K7É'³q…V2�•÷áÜyqçˆÓ cÌ|­G‰›“–w¥ðŽªšaŒ!ŠŒ1E°”‹¢¡(*ÖÖ60ÆqîÜ9Ž?Ή'�2ìÃ{…”c ”ŒBÇ)R(’v†�ëemð>„O…óÔeEQ¨$¥qKì�÷X<�sP;T¤çÞbƒs­5J)â8¦ÝqÜtÓ 9¿ö)ƒWÖ ~<#‰b“S×!$ÔMƒu V„…=�¸ª�_Y*ÊÍ߯úÕñóZ"ÚÛÛãøñ<òàCtz]¦EÎ=÷ÜÃË^öRвd:™à�Ú4äUIœ$¨8Bº†¦±(cŒ!ŽC 6œ§ÓmQÌ "¥9²¾F¯×#IbêºÄ:G–e¤iŒ/ktcLEÜiÑé¶8~ü$Þ[¤ !Ô�í-ò|Šhµ"DU’$BKɬ($:B+�Ã!œ§q BzkÆ`ç$*ÔÓ–™û,<-9Sƒ%$Þ:’4¢¥#bƒ~¥ƒÞ…`s{ ë!mõh¬ “-¹þô ä³Y– µ@)Á‘ck ‡Cã)ÓñUíé:ôz––†Œ–t»�‚tŽFk·iL]�D’dÐaÐíPΦÔEIK‹ÃZ3?–0_Y9Y C,N1>„jÆ9eY’%cëy¨åŠå«ðÞ“Ï*Ö׎`�çĉSTU8Î<~Ž¢œqìØ1LíD˜Š¢Æ4¼FE1ÝN©%¨šš¦ ÚKèˆXS˜cmx¬d ˜¯²îN`�Ãz‡ógš`P© ù¶Úc³iÈ3¯À9\ã©cè¬��÷ÙܼÌx:¥×ëÒø�¥¨ �„gq>>^YkZpÕ#òþjhÊ=��<^À£�?JwÐÃ6 ³Y‰RŠÇÏ�em}�¦i˜9ãIð†²V+xr:FÇoêðJê …ɰ×ÇU–N§ÃÚÚÊ|lQ#©›š†˜¦±èH0É Ò(fy¹Å`0 nJövIâxN^ Q¤pÎÌŸÑ`HÛÏC”I¤ñ£„¤jJß„} Öƒk¾‚ãD@Z*$¥4Z <Þ:P’ååeâÈ#…¢,kšIEk$ë 8~ìh峘v'c29àȱ †ƒ>·Ür ŸøØGé÷ûéñÆ2t‚¥é Ysúä±ð%qÒÇbÀU4 X+ˆ„FOU5dY—²,¹pi kJú�ˆD[”/©êš¢ÔNÐívi·Ûx[[[”³)%ínŸn§O]:Ý>ÖZê9ñ*Q–%x‰wá†Ò:ä³Ö‚$ÒÑ-úý FýÇ7ŽÐét(÷'Äi �¤Ýï“Æq(ŠŠ²®ÐZ3 QZƒW³…;¼2»a`nm)=wyEX‘¼½kRr IDATßïS×5EehLÅdrÀîn›¥¥eÚí6£AÉlu„Aठ¬+d¤Yê�8uüÅt°×ŸÒí÷ðÔÔ¦¤ÝJìgÐʱ¼Ôce©”‰%ÖŠ��²–&Ž5Î{ê*Çù )¼oHâ˜N7"kõQÊ3›¥$IF·Ûecc�8Ž©êçt©�AX´–t»]ŠÜ�e!n]–gj¢H¡DXz~4Q×5RJX]^aww7èMCQääENœ} ×ë‘´²¹ˆªèô;³œ4Nè¶;¸Äàæq^Áx<IΠ”"σ‘¤´ ,JêÚ Pt{7dǼ©bÂòhˆ—Á«ÙÞ¹D«•Ž^·ÅhÔÇ9C%t»m’$!ÙV´²+:ýi+TN³­CÙ!=q¢p¾¡n*šz† ¥"’$AH‹§"‰$ÎLSc¬#Š"âX‚²4xoaná×u�Åã�˜Ÿ?KS•HÉá@«5ÄI4Ç4Ü{ïôzn¹åÅäyÎåË—¸á†ë�j‰Ë—/Ó‰Gh­¨*Ë¥‹ÛÁH±–Ú6ÔÆÒÒšÚ:Œ©pÎଠ:á>¿â!yoñR ”ÄK� ‡§ªƒGz%¼è½ÞÜüq²¶AëˆV–R%“É„é´ÀV6h½N�µSÚ½>hÁ$ŸQVi'q5r5|鹪{„çu® ])×xEŽn·Ëææ&²ÓÅA–eH¥8þEjÈ¢S•ó~BÓ8ʪÁͱHkÒ$ºš½ý¶vvhœ¤,kÚY›µÕ5"±yi“K—6™NgHÑétyè¡G�JQ–umˆ“+U9Cª ßkÐR!”`:�p09 Núƒ>×]wš••!ýN›4‰©òVxþò¾(Mƒ5AlTR`mƒ5£a�¥Q­‡s Î68ïP ´á]Iâ8"k¥$qŒÖ­ÕaWˆP•$EY1™Îpž�ÈÐ4L§Sã BBš%(áiê�çÈÆi�ð\ÞºÈ4Ÿ`œ¡(K´Š8Øß'MbÊ"g2™i‰3­eYb� ý‰#š¦&�#Û€ôXÛ༡ÓiÑíe ‡}†Ã>I‘¦1RB] ,J‰p,JE:$�dmâ(e@´ R:³‘ËV«Å,ωµ"Ž#FKCê¦BHèzd­ )<Ž¼È‰bMÝTèH³?Þ§ÛëRU%q Ú[’, ÖžÒd­I–QU塯ι'MfÓixͦÔUy¨­¬ŒX]Yb<Ù#J³Ù˜V+ź†V;ÅÚ†^¯ËþþE1£ij’8BIE+K9yâDAg Y;"Š`±®¡1ÖÖ8gçåQ:Ò¤i‚ÀÓé´0ÖÒé´Ù¼t�Å‹@X½~—v;ÃZËt:EªP^EÈàÍ5Æ æç2Žcœ±„R”ó—Ƙ÷a0>²q”"/º�.Î&“1eU�ç9˜%5uU2OhL3—žišÒé¶jN Já…Çqu…t¥uÐz˜{9sÈÏ5 !ç:~þÎax VTWJ\í»…é¤`wï€ñ4g:™ÑêvI’+,ÆÔX,I£„Ä4É5Ú™⼿’õÆ•¯¯.5W׿ý‘ô‡¦Ó1:Ò´Ú³bÀt6ceueN”7¯›eŒÃZ>´¯…$�cê*�m+k‘ÆËK#ª¢¤®Jâ8 Ç0/É`mÃÞþ„s¶9a“Yž£¤dee•á GY]¿×ëà¬!Š4IB»RJ¤4uC9­‚&æyÖ„{FK¬I)Þ Œ³8ïuü¬4 §% é¬ 7˜ ÚÃpÐ'Ž#ZIÂÆú._ºÄ™³g)‹¼ Ýî1�è8¡•u�JcjÃÝ÷ÜCc ívÆÉ“'ôº¬¯¬ÒJb†Ý>kËKœü Û[›c1U�–!CJË�ÊÜ ©mM NYãÄ‘ ÚYJ¿Û§×ë£UDã<É\S)ªœÊTX×€p¤i‹¥åuªªF¼-5{{{L&Óp¿ÊI<ðÀgHÒ„ýñ$x(ILQæ”Å)=¦ª)Ë%Çt:aZLé :t{m–W–ñ®¡©JšºbëÒEvvwØO*x•ívÊ©cÇYYÐÊbŽÝ •%HéðÞàLƒ±5Â;”„(’”u„t­ˆæY.Wk3I¤á�,IIÒS[ò|FÇŒâXSTÖ[oZ’¦E>egw %`m}ï-Ó}Î]8Gí¢$¢jz�.\ÂÖŽÙ,ÇC·ÝÅÔ†ª çd|0ÆyOGTUI”†¤)P`m}˜Ì‘e Y+áQZИ¥qÍ…XCš¦ÄqDÓ²4£¬JªºD�žkR…ì­Ùt’ æÞvwwiµZìïï“W%·.‹Y)Šª¤6†ñtJÇx ÓíPT!,r0ÓÔ5�n7 (óðP’¤EN’$h’>&“ Þ{ööö°Ö„0FÓ45uSà½ÃØ:x±°ÏpØÃ˜†N§…÷Ž��u¬5ôû=z½ëëëÄqHqnµ[ììƒòA÷ò†šg?Ê`teYJ’ć^ùl6!Ë2´V¬­®pùÒ:�”á¨ÏÆÆ*'NcyyÊ2§(KZí�n;T8–!‚¥[UZEX*·*¥„d„ ÒAw8vìU]ν Ò®³KK#¦5išá¬c6›§ IÑî´étÛ4M0Î�l”–!ÑC…°´Š"„8o1Þr`çžHÖ΂f8÷Z¯�¼’0àÃï‚—Æ(káà`Êä`J”¤)ØÜ¾ÄÞî.Q¬ {ÄI0¼¤ ¤ ®ñtœsOHL¸B@×ê?Bb<�ét{s--$˜ÄqŒmB6bÓ4´Ûmœ€íímc ÄiB‘¤i0:Û­EQÐ45Î{¦“Éá8�ç³¹!¢)ò��iLÃþÁ”Í­ GF‘fwo—½íò|JUå }’TSUQŒYc,e]2›åìlïÑTÛ¸à%;‹5©BXc0èÑ43&“}šª»pŒ÷ØÝÛ&¯fLó1k«¤iD»�Ðë´p¶¡˜Žyô±ÇhœG*ʼncl¬­ÐŠ"Fƒ.k+ û]4–V¯ÂVÔuŽ$„ö´|+ËHb,/nÓPW5 PRÍ¡`9J!i¬¡ßëÒ¸†i9£² GQgPRP75.žçÜùs\Ú¼Dmœð4.$:`Î^B8X^Z¦*¬qt»=ö÷ÇD:boc-JëP6[„Œ-ë,*’¤ipÿ•xïBzø<‹&ᤶ�¥Ö6!dMcæb/xï¤ùão­EiEÝ4A„öijÓ€ò4¦!β�ÆÚÔÂ6^ ЦÂÉyÊ+APEI�‚¼ ©ÂÆYšÚPÕÕá¼ dÈ2Ó‘©¶ÚíJ…ÁDGŠV»¢M…à#E’&Lgcâ$¦×ïÐjgìîí0�Nèvz4�áâÅK¬¯¯aŒáòå‹!Ô!AH?¯�<Í4‰ÐJ‡ŒÈºF+�V!$©¤À;�PV%Ç�m°º¶ÌÒʈn¯…T'Š4�IRÍêú Z ^ðÂë� .o^D*A]—h-ñÖ“$)@8>¡”¤®jвdÐï#•¤Ýj±½³ÅÊÊ*ÓÙ˜ª*™Nf úëœ=–i>EiÍÁ<luu™4‰­î+÷‚õP7†º1X®´u.àW²ø8B"€±M0v”:ÔY¯�Εdï,MÕ€“¨(ÁËx2¥Ès¬·LgcòÙ„4MXY]B)A•Ïèt:(!ÑR㬣, ê&�lÇ�°Ÿœ„0' )ýE1U¢6qzLZ†ûi{{››nº‰V»Íƒ>ˆŽB" B’¥­�úí™fÉüÚÔ$QDéПHc¬a–ÏæFœ£1 J'”µ£®-O«�RæSvw·ˆ"E–D¤qLYæDZ££ˆƒƒzèa67·hÃòh%5E1#NÂ\¹¼,ØÚÞ"M[dYŠuŽ2¯H“W«/, îU¯üj², óeÄ­6ãÝ=Ž}Õ¶4tÚ{Û;d:Å"ñVPÏ*Ê&į\<ð$mÉúR�:#�§, Â:Œ«èõS.n^F�“¯%Y·Cg4Bi(š¯___g8¢”¢ÝnsìØ1Ö׎-%ŽÐqÄÊÊ ;ãý01T†Dï-kk+x†$Rò�¶"†£.2‰HÒ”•õµ 7µpD‘dcc ¤¤ ³œ¥Á0XüEA$‹«Ë`Õz‡ÆIÈt„—‚HI$ž¢1m�2ƒ´aª+"hÇóùMAŸJÓxžÁX±¹y pÌò Ó²˜¾¡l�÷ë<Âq:Vó8w¬Ñqèƒ6нË3Œñ Mã‘2F©­Rú½%ÀqìxŠñ52Šèõ:ÈŒó!±‚`©ƒƒ«Á‰Ãõªä<ÿ’kËr{�N›º6$I„÷–Éd2Ÿ6Q’$Q´½N§ƒÒ°¿»ÒÅsmuN:ZV™ÌïŠp~ÅÕê·Î9¤º:)@xxOx뉵7à !6cÀ!#I3ãÛ�vJÖJˆ”Bú@±Ž¨j{H(J)¤¸zÏÁU�PÍ ÐsÕK²Ö… ©óÌ9‡½r¯ÎïÏV«Å‡?üaŽ;Æ·~ë·ò�|¥"vÇF½.rn\J)‰¢—†ök";!ÝÌu(æáL‰ð„ÌbihÊc®®HE‡ÄŸº)‰¢­#fÓœóç.±½½G»Óa”µyôÑÇ9ºqdm(ØVÛDiÌÚÊ**Òäù… •¤ÄIÊdrUÃþ\xZZ^„ ‰Eªˆ{î¿�2Ï $IÂÎΗ/_f<ÞçÔ©S¸Æ’—5û{ãù !é÷‡¬.­’è„O}òSœ8q‚œ¾Žª¨ùÝ?~?;›[t²i¤¹å–[Âí±JèCW ÉùÇÎÓévØÝ: MZTEƒ§Fê¡”hPRИ ¼£±5{ÒÖF#n¸á�$c8²µµ…–’X‡93U]ÑŠCšíÆÆ»“ƒÃ,2¥q"°f ÂÎ^E¢I&±ÆíŒÝý=Ê2ˆ}i£uF·Õ¦»Ô¢;è³¹[àý­D‡ ªÂɘH+œ«Ã„@ja~Š "¬u�,œó!ûnʇ宆¬E‡¡º¦i0Ʊ?>aï�J!ô<áA ¤‡,ŽÐóI¡BD¬‘JQ;‡u‚ýýœ•äµawŠ7Žª¶Xs%3,ÌŸ(Ë)HA»ÛÁb˜L&¤‘â± ÎT¸?® ´WÒʽÿìPÆ•—ôöðû�&|%ø!Ÿ˜ò*¯œ ƒŸgRyéqØ�©s ¼ðæiîÎ>�€³œæ»QRÎSß=8 ñJƒàÎ]$âC�(„ƒl°Ô]úU¤±ó‰ÌÖÚù52XëIÓÓé%‡†Ò•PNÝ”av{VXBQQUU˜Ï&Cö¦÷>�Óü �c,êð�Á¹0ÀFJ«yÜ_Yœ/ÿîÞ,Ö²ôºïû}ÃÏtçªjVU³›dS$[RLS`ìXÑš�À‡ bØozð‹ øÉñƒ[0bË€aøÑ1í1âÇØŽ�ÄB‚Øüd‰”E¦¤&ÙCuWU÷ϸ§oÈÃúö¹·h¶ÔR+�� tŸª[瞽ϾµÖýÿÿET�ˆ, Ø, .ÑŽU‚Ÿ�D³§$iiÛ­í¦áÙ³çìš5UUHÏSm˜Î'¨X±Ù®¹vÂOÿ犃ÿñßähq@ç:ÜXõ¦…YE“ ¿t�G¥ãJô³yá72M•ÒöÁR®WLzªœÓ3©¯.®88X°˜M˜L*4 7ôèÁGâL0™ÑœºÝŸÜúöþ•?@(“ rùWTðéî5(­)'O×ÏX­6Ü\¯øÑל7¾÷]ÑRå©¡¯å3�÷D°¹Á9¹ÎZ§ §DlGm—R(£èC‹ó1:”6”•e6™0�Ö”EAN*ܨÙlZ.ÎoØm{Œñìš�mÓ±ÙmÉŠ|On(MEU Þ¡µÅj¨J�µkºUþýíCP‘©tãx&“)¯¼úIÞy÷œsXkPÖÐ÷-»]ËÅÅ1ÆdÏ 9>>"ÏJ®¯–¬W[±98âüüœÃé¹-øSÿÙOQå†È·¿ýmnndî¸1�nÖ[®VKÚaàf¹b>Ÿ1-ùìg^c6›Q×@²ÇÕzÅ´ªx÷É»âbP•¬W+Þ»¹ààhÎ'¼ÄÙÙ)ÓBðÓårI]Nnuw½³û÷øíqªˆ’²®ˆôÌf÷ºÚGªª .r¢ {=„ˆþqB ï{‚ÍÁ6륈=C ³šf³ÅjPQXkUUà“*Ý ©‘‡&DpHà‹AIöoäÁ"FbbÝô}Ÿ²n›ôòpÞU…c01R€­È�ï¤ÄOŸ’Æh×wt;ÏåõçD è]@EŒkÖË õ´’þ`SS”†ÙA…Çãc�*�¨Jq›5¾ ໣¯øa¯{V`TÂØÚžÛ u—S­tD)ƒÌ>÷ûâûÐý0Ž�äÈ^d: GÈ%:�7’n+eá{FT‚#cZpf‹T)`4•­ jº¾'Ò¢� RbÃóæÛoQÔ�ÆÀâ½W€Ä<2&#„ÄŒKÇv·R•eÚ§'„­,yi Öë%Y‘ã¼c׈6k±˜¦lÛR•S–—;´*iš†¶A#…L“'l–åäU•à°\(Ý΃c»]3�Ôœž‚ã7~㛼ú©—ùä'³Ý¬Ð-´­ ÊÌ€¾XïVûþրˆ�z- ÎaÆk›²ÿˆfúýù“¶L (-‡GsNO¨‹ô¬x‡ë;¼ÈŒ&ôèïV<#;r|¤$î+·ñÚCª”´ô´4’ð…TqïÅ›!òøá#®¯—|ë×�ŸþéŸfÞyç‚ó Á§>ÒÛN¿{ºŽ! :(Bª°<žõzIŒ“YÅñÑ‚iY1©K‹J ,hLFÓötí€s‘¼˜Ò¶Ž§ï�SXÅß{“ûgk^~õeLV°ÝìØ&T£ª*šŽú�²}hšÔ%™Õt�¡*-~ØÒìV¬·Šò§§§”uÆr½ââê25<-‹Ù÷ܧ(36Û}×àúŽƒ£C..šÁÑž¢ªÉó‚õ͒ͶÃõžvèT`¹]óéO}š¯ýÿ%?ñ?Ák¯½v›ü>[ß÷üîïþ.¿ök¿Æ7¾ñ Þ|óMž~ÿ ÷gG|1ô]Ûà�ãââm2Éä¤�@Î ¬×+?eÔ•ø¡AOÛ¶´y†¶Š}ôîõAÃàˆ}$SÖä…bè½4t›–]Ø®–ôCKQär'¹YBÀ…ˆ‹’u+Œ,䂇­ÚJ&§”šœ˜núqñ‚§÷’åŠíM‘ˤð^ì{4)°EIØ@a•!*C¦Þh6›ƒóăX�ἃ¶E[ÅryC¼ô<úäKW º®ÅÅ[(\0J”î1Þ.ú#'Pàmýñb…4Â\ÒûQš;^0<ü>ÅØIàӀޭô~ñúA‘ 1&öà�€wg‹ \L°–õ;Œ(¥pÂ�²ìEx�,�d¤2)ãU„ÔÛÑYNYÖ,—K XÞÑ;ÇàºúÎw¾ƒÉÅ«l6›am‚]3ÉF}P‚gß„pðòÞ¾ x§„Aæ½°)« ÁGÚF²U� óù”W^}9UZkJÖ;‚×¼ÿþ<{¶ÆyGUM±A¥€(«ã˜Ð ƒÇ9O³ëhšŽÙ¢f×l(ëŒ/ù�óúç~„¢Ì¹¾¼àòêœëË+Ž9;9¥í;.®®h›Öæ°ÛmïКï�Ô-5\©Pcˆ_OR£-F‚Žxïè‡ï=>82[PO22­±ZîÅÁ¨ŒÂZðÂÝWãÜV\$¨¯KÌ4±£I•G:®#>8Œ2r�R⨥þF©HÛ4ÔZãû�ÅlÎoþ_ÿ7Ÿ{ý xxã�ßÖc™‹ÛIêCz¤'Ô˜|É=iT€ DœwR1iOUçðàþ Ó²¢È,™1RAEP6O×-2ôkKÚ¶£m:5 Ÿ2™L˜Ïçl·kÑå•À}r3®ÓýGZ¯?4íÖëýEÊ2Mži>ºGÛ2›Í(ò ¥"�=@)¡ Îçó”)À»ï¾C]×,3^ûì§±uMÔŠÁ;æGÇt>š�oÿæwxvyEÔ�ÉtÊŸùoþ ?÷s?ÇÑÑÑGú?¸åyÎ믿Î믿Î/þâ/ruuÅ¿øÿ‚úOÿ)ÿæß|“ÿäÇ^§ª*–Ëo¾ù&Y.YÝ+Ÿú J‰5HÓµô}Ïõò†ªïˆ ÔUFfs2~éº4UU0™TÜÜ,Å:GkbÉU†/#ù¾ºÙSÔ•Rtí@ï´"ì›ÌR!¢¢hHEbrFÐ1]·Æµ`üFt@:ù:‰ ‹¸HOh ‹ uV 2‹É-Zi¼? ´ô,ê)…Š*õˆ¤±ª´E«ûé€O­Ä6%ÆÈ®mñ¡Çh(ê’¢ÊiÛ-žž2+ñ­%4M%Nrûëõƒ*ò #d2þy„éä5îÙûß}�…”z1Rèì΂ö€»Óÿ"|¢ØÞ9*‚¿ËpBªª@”×;Y¯T[„¢VûÞ„‹A61ÑhRýï1Z ¬›m³FÃ0 µáùóȲŒƒƒÑ#VKJ1 –®RB¡÷�cÌέÍi[±¤ÒÏíðŽ$>ÌðQz;J)ªª œ”©!ÀÁlA×tý–å² ëzBˆñ6[c$=H”Ø/e¶@éÈ�þè¸zÂf·æß}ç·xùÑCNŽ9:œñ¹Ï¾Æùù9ÏŸ?§zŽ9==e¹\s~)æ¦#¤åƒQ%áŠF£Ó}¤I�Ñ wúˆ/@g1¢”XBi1Æ£±%Ï'ؼ¤ÔBö1hšv‡*>úÛ¾N²¦ƒNÓ6Xk÷×F½gÝIi^¯ê(‰LðžyžÓ6 ‹ÙœÞ \_^ñìÝ÷8=>ƽò o½ýýÔ?,Äš*¹Ž C� bHª5 ’h]!(Eº±��QJ1[LÄáÀŽýe¼c×õÌ‹RÎ_Ôl¶ y¡Xʺ`·¹àÑ£û<|ôHˆ^Ήۄ• .ºAúâU™`ëíï¹N�Û‡ åÍΉi¤²Š×>ûI6Ý’7ß|›õêš&Û1�N98œÓu/=ÑèÍÍ }ß²M×—_~™‡_ÂÎ9:>E£8;{€wŽ÷Û¿Ã[ÏÞâþýûüÅ¿øù“òO¾°ýQlGGGü¹?÷çø³öÏò¯ÿõ¿æø‡ÿ�‹‹ îŸâÜÀd:•þbKñÁùsú¾Ei%´ÄÌPÕÅ^„êc¤ïCÛ�LR†ùÁBè¡!yiEOÓt¼·yÊoþæwhƒ&¯jª"­©ê)ÉP—Ù|Aï#JD?·½z£‰ZšÒFCðà ™øÈ‚³ZIC16½ÛSÁ3™TÌ's–ÜÈsà=ŒTÁyTŒ¸n *�вp^A"ƒ‹L§Sºv‰örž‚—¦k 2´;Ê:çá㜜á½#¨m5!ö²¯ Uƒ”2·8¹X Ýf±w7Yä%Æ(>rR)Ý’Æ÷�ŸüÝÞL ¦!�'Ñj— qˆè0GŽq„äxBÊR…ÄpçØ‘EDšÉwƒg Þ¥–€N•š˜q!¢èQQOg"úYªbêéœW²LÜ"˜Íf„d(Ùlšý‚XUµ$u.€–óÝ(ZÖè¬æÙÓKnV+é[–Ý®e6›%÷ �MÎÛ$ñçŽ �çm"‡Sb|‰ÕrÇÕÕ’®é(Š’apdZ¦ù|Ƨ>õ ‡G Úv‡÷žjQ@ð"؞α(Þxã ¾ûFàä耓“æ‹GGG\^_ñìÙûìnÖäyÎ'¿ÌÅÕ¥Ü6*Üê{Òu¬áÙ IDAT¶Z“c�‰>ˆËA{­N@#d5…Í 67x/‰sf:JÿsZWYÉ`{t0(¯:Éæ½÷û >î{„JïzÀ‰Pù¶g)çR¥ªÝ£´Æèñ9�·¢¨1ZD±ï>}�££#Þ~ûmŒ1<~ü˜]³áfuÍ®mPFSªëºN¢™RhÄ^(xÒ�ªm'gÇ?Pd¢�l»“žPkúèQ´‹¤‘Ñ}À˜ŒÙ|Îý—PÖ—WW{¢¶fu%~tU�ë?Zõ¿GZ­·ÔuM×÷¬Þ?çz»Æ¹ÀË/¿BžçeMUÕ4»ŽëëkÎÎîóío›'OÞãÁƒ{,Øl6\^]‰T/ÖóC~÷û¿Íõ³¸¾¾æ—ù—ù©Ÿú©�|ÀØM)ÅOþäOò“?ù“üËù/ùÛûo”–Q²�¯ë)MÓÈ…3–Ð6D y1a½^cT$3–2Ï88>!Ï-¨Àà=Ö¸¶ÅyÏÅ'nZÎP^„wß}ʽû/‘ÛVŠ¢bpÃÐauÆÐ;l¦QF‘iŽðSLÙ©à‡�°�rr<£c²”ߊ~hwEžóÒÙ=^}ü*ß\}‹®|�o{t¦QJìê�×{° ­¥gBDiM–YŒQ"€T”Gë =6á⻦Axðð%f‹)7ë+¡ÂZ#�\m$è(u飌Œ¸¾ DcàoƒÓmŽ¢å3â­úývaYFÒ‹Z%ú.ˆè_>DǤª¹SE�4÷±+‰hÁf¤B}"L�/:Fò�R·aÞ{é�¶•|:�[û¤a:1©TN¤æ»¨ÛOïß s2@ ɜ˲¤ªj¶[#•T‚h\"œ˜,Ã芫›%Ož<áøøˆããc´wic&ø®O”øÈX¹¹4¦ÁŦYÌfSG‡,/×lÛF|ÚòZ¾·…~»c9ÓYÉâxоñ a k×ÒÓ žÍÖ“�ÊŽ›ÍŠç°X,8>>æàà�Ï}áGèûžçÏŸóìý÷Ém¶w QZ“’©çƒK±Å+¡â�p�0ļQîô CpøÁ1ø@UÔXDxŸkCTš<˱¹¥ë+L&÷šÛ$¨EAYËÚÑõ=»ÝN�ˆ N™-°™$^qf0Æ�Ñy .Òv�XIí¶<~ü˜÷/ÎɬὧïRV/?|„ÛóþûÏ ˆ�Ð0ÈØk5΂ Bô !H@5Y«)mŽwV\²ƒŒqYN¥,Á(l!ä*”¢,s&“›etë MÓñ#Ÿ™ÓÓÃTý ”åTèß]—ªècD´Ü4íG]–?Ü á`q�éì“Uؼ¢íP†4CÙîz®¯W,o¶ô�çâjÉõÍšz2çâòš¦¸º^q³ZÑ Ž££=çOßå­ßy“Ÿþ©Ÿâïü�¿Ã§?ýé�|°w·o}ë[<{öŒü�÷•W^á~Ḽºæ×¾ù<~ô˜³³¬¶®—[./ohº�Åá e-ÞMu•Ñu&³šjZã‚g×¶lv-™ÍÅ…{ˆžpÕÈ'’ÿ÷CÇèÊ ò�‰m¿ÁfŽˆ#²nv{å~„‘æ½ô‘¼çôôTèÑF'ÁlÅ|± iZ9ÏZ�Ñ-AŠè)­ÐÖ M²¥W1 '=ÊÚÄM*;*áóÎb (eq¼#Ë3D'åé]O$’âi7~Ϻ*™N'…Ù¬7¢Þ^¼ò†½øàum×óý7ßd:›Òv]ßñÉW?¹×% mºÅù­y&³sÄeÄæ‘Àf»£(Jž¼÷„{÷îs½¼$DGï;ªiNQÖÛK¶ÍŠ¢ÔØ ™‚C?´ô®“ÕÇ(a¿!=àåvÅÅÍ57Ëѯ,xüøeðš*¯(³’¢¨™”5eVÊ‚ê=ÖÊ‚Þu-mÛ‚Çfy)¦¸dZÜ´£'+ò䩦(LN]Nð­cRTX,îgh¾ïº­`6›á{‡ à�§o{fÓ‡ 1ü5Æâ} ª¥·½m„áhóBÈHAŽ1Fh»žY^ LF78¶m“ªŠ¶k†×âò}þþû¼öêgP^ÑìZš]Ëâà�ÕZŠ‚éü ÝÇâP€ŠÒ#ÖéÚ9On 4F²­ ÈBŒš~� U”5ƒÇï›åËå%——çMøÑ�ã³)Q÷t®¡z!hä–ª.…M™ µ¿žï¾ùŠìãé€Î/oØ6=Þ{´U¸�ü¡¢Ð~c¢Î†q‹jÂK3�Ö¼ýöÛ¬w+´¯£'ï¼KÛ]c¢fØyþæßø›|ùË_þŽqûÖ·¾Å_ø €¿÷÷þ_üâÿÀŸQUù/ÿeþÄŸøüõ¿þ×¹^®yýÇ~k-“ùŒÂ+š¶Çæ‘ããSª¬§,6Ïé�,MÛ²YnØnN�OجV\žÿ.?þ…×9<�c”âÝwß%ÆÈé½c&uA]”âùe-18ò¤óAA® NAp…oªaˆC�ŠÆ(ŠÌ¦æº0H0ÀЦat¶äÑ«¹v�ÜX†¾çù³g+ÐOn4yž'�©J x‹§K,�c%$ ̓ƒ9ÖZŽ��ö{×5{æ×ƒOÜg:­e6‹sÂÈ3‚‡%ôòQ—CÓFŸ²ÉQKìÙ]h•²s#£=\LNß A(ìa3�^Æ]uú(Ô©_´Ü¬±Ö2¤1Y–¡¬I®–¦�IŒ##ÈìÝ�cŒ{©/3Z�˜Q_2¸”§J”[_2…@~· û}©Tv½ì<†‘d"ûß¶�À9QšÏ2šà¶ µ™&Ä åc**† ç;†ÀÕùó½î(pp:Ø{í‰Ü­ÐÕ¹4'*8!Ú =!Ø(•`�“#ŽŽŽÈJ�Ѩ@ßËL›£ã§g‡äyFß÷X5ÖŒI•Tó1]s“\à½è½£ë¶Í†åòš¨È*‚èÓ´ÒXc)’8t»ÝðÅ/~‘ßyã ©Šóœ,“Ö"ÏD…’þ—æ¬ÑJª½(3£„Å'ŸotbÚjÐ&¹�Ç€Í4eUŠ9ëdB^X¶ÍF2ˆt}bˆm±:“õÈæ<öë͆ºžÒîú�gÅctžN’ ˆ3ÚŠˆ+žfZæ{Œ¶×77<}ú”¶kP:²ÛmiºßûÞw9¬k^{åS|ýë_çððð£G‡ØÆàó+¿ò+|ñ‹_äÁƒ|þóŸÿØAh:�òs?ÿóüóþÏY­–bý¡¤b¸¼¸d»]Q•u•Š®k©&5ÆÖ«•4#­‘IŸÀã—“eï½÷”¾o999Á†Íz%^[ZS%¨H]Uh-l6£E �²È÷¶.!tZ�‰²ˆmö6ÈÂ+THEU–Ü\ßÐ6 çççl6›=Ä”eY)Öý»f'„…ä%’Ðe¤’êܬ¶Ì'bÔhl†Ò· •R¢ø­P$0È@0c%p„ ™ºRrÃïÇ]Eïœd�E.ÃÙÒ¢ªÒƒµ×åÜÁáI·iÐÚ¨\·Æ’iâ—YKÛ6’•ú@f32-0d]”ȹ€�h³ÞËÐ-DœL¹5ZSØL¾‡µ|×÷ûpdâÝÅ6ÜÑÉ›öÇ>6Ïïnc �1¦ìÔßR|I£ƒùt2‹Jöùòï™@ÃÇ’,Ìçs>¦i“»vߑۜÃCfó9Ñn–+I‚' �¾ëöµŽÒ#Š!bTb�&öZ .õnÊjlžIÒ#6ËXm7<{þŒëÕŠ‹ËKŠªÄe¤vb¦¢y™c’Œ@Gä¹RBõ¶Jal–´A‰J®5™–¹:™6X›Cä�wÞáàè�{gg¼ûî»ÌfSš®aZÕb`«¤ŠT@­"è“C ,> }\ƻȵ7ZÓ»^îùdj«¬¾?$Û¬}V…Á¢µ…(”ûݶ孷ÞáúzÅbq€üÇ @y6•É¡•dúR¿”êhT¢‘‡5py}É{ï=aµ¹A)ص[v» ýjÉç>óYþþÿ÷©ëúîn?|Æí�*EÁÏÿüÏó�o|ƒ¦ixþþûILÚR×%‡‡s&u…ËÕ2�[3@�E6³–OúUÜ¿Gßµ¬µûŒU+ùwï¼xz%3ŽÇR…�¤…@‰·¢Ù‘Ï·´‰LÜ�Š&%C#|g´,†eQP”Ò,΋›g+cª!y§%+˜¾éÈ‹|o3™ˆ$À9sáR%4Æõ[åèP-º£aè©J™ìYåþ¼@”i¯mÃtZñàþ=qâè{ª2'º‘zž‡wàÍñ8Æc32&JÁd6ežÍfÍåÕ%W×—l›-ÎKí^b6�b´¡m:Ö« Ã0P—5ÇÇ'I×£ÉuF™è éw®}ŽM‹«J$Œ@HÕŽ,Ô}L×·ɪ‚Þ;š®Ád–ëåŽÙÁ$M W�¢,)Š‚ª.±: U|¼~©òß§`Q<ë´Òd6ÛW* 1"™ùôý7¿Çg>ó&³)o½ý6G Pâ”Ý;Ó†Òf"0�)y1QÅ}¢ƒT`£FÉˈ£“"´÷~ßDEb”{Þj‹Ö†¡­WŒŠóó œ �üÇ @³é!e)%˜1&Í9QÄ=ãHÔ·!ÊM~u}%Yq¢3+é6NŽù_ÿÿ¯Ÿqû£ BÖZ~æg~†ÿåŸý3®¯¯%S—Ô%1Óä¡ô.`“gÕfµ¢ZšÝŽÓ³3¾ôÇÿ8÷Ügh;.ÎÏypï>óù �£m·)ÓÉ_ÌÑwâØ�åvÏ­ÏóœédÂÐäVæ{ÔUI¶ïkHµàú�nè™LÄÙÁõNÆ¢·­dT)“,ScÌ6û49ò‡ÑŸ÷ ¥RXDgÔ¶-MÓ‚¿ÅØÓè‹¢,%XêHŒ�~èû[Ÿ2Y›%X2-ߨ`—]Iu$è�Ç�A%/²³d“*…àÜUY2ŸL™Ô5E.ÁÚhMn3в°EbÚŸÞ)ùOï½Í´¸ÝZ±Ç)Ë’¡—GQHp\'ƒË,í'ʽ٠/0 qOk¾[1#+1U�ÛvG$�–¼(­m[®®®xöìW——{¿Çû÷ï3›Í0Úàœ§ï以©²’i=!3ï\¢YÀ‘êÓ%KPÐ{—zâFªJŠªÀÓ3�Ï…@¢ÚÈs,}!0)™ºËÔIÞ‡¾ä>2Æ’gZ9¾”ô²Ým¹ººâÇìÇøàüœàe^Ü@ô äYF•”™P¬QÒãImEP’̨T¡¤ÿ$,WE�n?1Ñ»2î|4§M†µB ò8hÛŽ·ßy—«‹%Ï>¸àî}Ì ¨˜Ò´ !z¹™]ܳ�€6‰4f4‘ã9E™‘…Çm:þñÿô�Y,¿×ºÿ{n¿_ð·?ª ”ç9?ó3?ïþoÿ+hCYW¬V+ÚF&Cš4‡Æd"Œ Œ5<~üˆÓ“#ò,c6›‘ÛŒívËf³c×n)3‹IšmURËp©ªª„f!³Á&õd™i¥)²›–ê!y€C2Š«Ê’¶i! •ÙG•ÄŠãôUñç°w¾ !Èܧ´ð‘þýnÆîÆ÷q¯–Þ€KNÜmj´Ëß�ðnHæ˜!ŽSáÎ"ãCúNÂ,"ÞÒ£c©²i#¡Nï'¤l9A;ÍnGßvt­$Ý®aèzüàiBzõm‡ rV}w_ïÿ}Ok :)Ü…©Ä†!Ñ»ƒža�‰”]ßÓÃRÝ‹bµ$,EžSÎ û}z?ìÅ™z0oíaL‚ÚUB^T$“úE‘‹8’˜zI‘étÂááU]bR%Öu *$ýÓ7Þ©êöŸúÖPö¶‚ñB+#YøÈÌôQÜ��ÑtmÇùù9OŸ¼Çv³e>�qÿÞ}æÓ™¶¸~�¤%J#=’s<à…}cÄh°™@—JÉL*•lž‹“: 3I}p©âTÌç3�BtBû¥éÛž2³i¤µ8j/ÕNŒa�@xØfÄ d¢’5!&“š¡ïi»–ÍfÅ�½þ:o¿ùóm³C+Ea,E– …<ÁÌÆZ×ãÆ€}ŠEÒÇD%q®¸M1„Aàx÷³¤WdÈLžP€ •àÁ¼(™NÜܬG×¶<~üðcV@³£ä$Q¯ïÝžñöøû˜Ñˆ1ÞtV“9‡‡sÎß~Æßú•¿Å+¯¼ò‡ OŸ>å/ý¥¿ôûŸq»„~ögVæÃü!¶ÉdÂç?ÿyþÏÿãçèä˜Ái.Šdt}ßá|`:­Y,,Øm×Ìæs¶Û-“zÂjµâ­7ßæ½§ïqïì ­y!c­EÀeSoâà`Afó=CFpö:APBË4Ü.V#F=ÂÆº¶cpŽéd†RŠ"M^Í3qÉβlßS§<ϱ‰†<öPö=¥;ª~€¡w2µÒxk'7¹Èn–2· ©°¸rÎá†AšûC¢ ûÛãE}Ež“gyå:/�Aã)¨„ôê� 4)8—YÎt:åðà€³ãŽ�� 1H¦è&�ÌXç êªb³ZQ•7WW¸a Ý5L¦Sæ³E&pȤ®9\PWµŒBÏ2¬µÄäa7òÀK¶˜¢…¸ðw+¢»Û] ÒX•ŽžsŽ®ïéúžÁ ²x¾�E“XpÙ~¿»¥%Œ È( $)ÐÙä^`n½õö¿«FmU*3ke^“±&ÑŠ…Vo­‘ÅÔ9¶»5ëõï-:5|‚uªÞÒ9�÷ä·úúáNm’x4KÁp$›Ä€Q#ÑB¼�Ò\]]ñäÉ...ÈŒhýNŽŽ™ÏæÒÏK}ÀÙlJ]TòLw±ic°™ìwt7V@Ûí´TäýÐ BPd(GG¸ÁµF+›¶Læ(u=‹é”I=!Ï‹ÔoÄeô§+dkÄHØ9ñ’Tê–öß42h½ZígO½òÊ+¼ûä :Š&°(²}?2ƈU" Xî¶É®*�1Ùk¤’[|ðÒ÷Ž�!ÁšQÉðͶk(Š£ ¹•k¥±“Qu5åòòЧOŸ¡mFˆðð¥s�–Å)/ 6Û ÆU%½ Y¢¤YœYb L5e•ƒ£Y®ùÓ?û¾öµ¯ýÁVþØf³_ùÊWøÌg>ó‘çÁƒ|å+_ùCW@ãöÒK/±Ùløæ¯ÿ:»¦¡o;fÓ—çé†;d±˜qpp@ž" »º¼¦**š¦åéÓ÷9;=£ÙxN‘ìv “zJ?42›Íi¡–.²øæâA¥ˆì¶b t»†³{÷D—2Ÿ%ÇãÀrµ¢žÔ´mËÑáÃàö,¯‘ÔuÝ®‘ÉŽÞS&ÈÌZËv³Å»¯ˆvÛmzÝ1ŸÍ°Æ°kêº"„wBŒ©·ã�84KÃV²R�pé±²ÊLFðž"Ïo!.ÒàAc˜Ïæl7[ˆÐìvl6ŒÖtmËò憢¨è»ž¾ë¥�c…IXe^0)«Ôи±òqb°Z–%�ÀÕõ5‹ÙLö›åV†�=xð€ƒùçÏÞ{Ê;OÞáÑǼþ…×yëûo&Ì^f2­—+²t­§“ m×%O±@Ó%ØÓÜÚàŒŽ³é”ÍrE]UçéÛŽi=ÙWs#­^%’IH¤Ÿ’ cm"t„ý玽‚Xý(’E’Þ9ñ”j’(�B• s!(­î$Ü\’@’V¡h…ii”@FZ�L+Mf5yf)rKU”˜¤=¶Æˆ,ËÈöéTq¥^êëÔoI5Òƒ‹˜ÌÈ÷Ó28Ospl‚Æ÷$7B™X—7kž={Ž‘šLò…tÞÑ =y‘K`JA×{O?Hï§®'yAžWdy.°uЧ•8î}ðÁ9——W¬—+ªÉ”÷N?žÈÚdÉ“Ém„~«•Œ pNXãôÊ‹‹%ƒkº¿ëùÅ_üÅ�ÆíþýûÿŸüÎÛþüŸÿóüê¯þ*e]‘ç%‹Å‚Ó{' CÇl>Iøº<¤]R2WUEÛ;ÖËmßÓtBßž-ŽÈ²Bl|/¦1°»¸À9'sß»4)ÜÎw?<<¤( Þÿ}�ެapŽÍrÅz·EňQšùtF]רԣ+�º(‰Î'øÐìí’N�ޱEN•ܬWû&0°ÏžFƒE�è‘¡"­5ƒ¾“µkуÜ5ˆ�ÖãœѲL*aPUEò �åõ5®ï÷Tq¥d9_úÏž@]‹û†Kì´1Kƒ£Ès¶Û-Íf+džb·íÆl1§m[Š,Ã(Íõf>0ŸÍˆ>°¼¾ÙOP}õÕW999á`¾`½Z1©k=~Ìó§ïóÁ$ý“hN¦‹9Ñy™áíVD®Y!½OÜ»“ë(É@UUäy¾?cŸfÌ„atX¾­vï²ÿ¤ª¼ >þ@@ú�ê/?@ B¼È"÷9 ñx±ò£�GzHu{kÊ:îs$‹¼x?�ça_Ä'ŠÞ=þq“`ñ‰ö<ÒˆÇ÷{!‰Q©ÒÒ#BÒ":@Œ<þœ‹÷å:>;æÞé)‹ÃC6Û5Ëå’õzM–ÕTU±G ´U >Ò;¤9;Jc­Ú?óCš�—%Cïq. ”&39J[¼�4Û^mA IDAT»ŽÅfÝ�ç9³¹ÀëÍZ‹KFe€R&}×4YT¤FÇjµÚ£®¸¼¼$·š{÷îñÒK/ñÖ[oñòË/£µæÙ³gÔ³)nµ")òe4½±ôm‡OŒÑNh|6÷Ý)…ô�ŒŒH }be4*U÷Ñ(ÚBÄæM·ã£n€º¡%Ë,í°Ã �«›-YV¬7+¶Û-}ß2 ýÐòÚ§_!„žnÓð7þ»¿±oœýǼeYÆ_ý«•¿öË�ºª¨*±ä¸¾÷ïa+“~hQV\e˲d·Û±¼Y¡04»Š€s;H�ÞÍNFÝÚܰZ.™L*¢V8«ñAÄeuY‰['tV•܇Gzv‘åÒ|T ×Ĥ ¹C/ÔÊà=ÅdBÛ4tÛ†â~ŽsžI]³Z­DÔ7¸}ó\ký»nèoµ.B£•s¤ƒÆD#*ü;‹—1©j0wfnRa)ó‚ºá FÑÓ¶m²(r³ZQù‰,ô šòr›1ŸÈÈ€­ÛH?Îyü~qg¶tMËõåE%Ƴçççè(fó<' Ž—>âêêŠÜØè¤÷·Z­øþ÷¾Çf¹å»ß“ÓÓSŠ(÷F³ëpÁÓôõdJ^È‚]×Ò†Ži…Ñu›Í×¢¬×¢9Ѩ=ü$‚ÅøBŸîîyƒŒrŒÛà. `öB“lâëübõ=wú€‰ãØ“Ôû@0žÃÛH‘c¿­E×2ZAí�=M<™lcà¼Ë~»û=ïÂ’R ±O$À¤�€wqúÌ0cèŽL*Nå8ÅÐ;¢—‰¨Û¶a¹Yr±¼äüüœ“³æó9§gg¼ô‰O°Þ,ùàƒØm$ñªŠc .-¼.19GÓÖÖJpݵ-Cï‹- ¬Éq.Òl:¶Ã–“ùC¦Ù­vlÛŽ¢0œÝˆs­$—:¦ÄJì•”J,M)ÊœÁ÷".�ÂB-2yæ6«5e^pvrÊÕÅåÞ¢I™Œ]×£R+3SÈ9•~q 7Ž&{æ%·Éæ~È^¤±\ŒTz<ƒóÌ�fÔç×&’e/&7¿×ö¡QâßøW0­j|?ÈÔÓmÓP$ÆÝÁ¸ó¼Üãò# £µ¾“¡¥ H†«ï3xk3¢ïéR“[†ÔÉÜ{kÅò#³–è¤q>èž]ˆøa ( ú¶Û3›eCn…ÌÑuÁ9æ“)™2((ŒeVÕL'ÉÀÚŽåÕõ~»�d`£Mþ“'O°•øTÅq¸YÂÜ«¼Øïw´Ù‘ánmÛJõ¯5o¼ñ=Þzë=‹UU0t�4š |qp€ÖšÕjÅf½x(D®/¯¨*qjX­VûäÌZ‹ÉdßwÏï¸Ý­@¸8‚üá…÷ŒÞ7î¹%h nû†/‰Øî½v,r½8çf \âÚýb»ËÚ®ñçãPÛ‘A8.|# ÛŽBÜ$ÿè]‡G‚)‘ýh ­GÚúHm�ûÞŠÉ,Y&Ï]»i(ÊœI6eðç—çœ__0ŸÎ˜-æ,fsæ ^}åÓ4ÝŽë륌p!9�×´­$Py!îÃ0жJõx/Õ`fsrcé;™¡µYn:Gþ(gè]×�šÅÁ”ÉD<ÔÆ{Ϲõè–$ò¿ Ôyžï�ª*ÑèÇ[o½Ežç|î Ÿç;ßùÝ0ptrÌj³&h(ú]‹É³Q‹cºáVƒ¦½§�b�ÆDF½¨i¯Ÿ\7™É%yH¤®KNÏQêjúï/¤²}h蓯}šÃ£ž?}�‹çÏèc ÷žÁ 8×¢ØYX+F•Ÿ|üˆnÛòWþÛ¿ò±û/ÿ¡m>äÿê_Ñ»Ž¢,iÚ‡ót >:®¯®¹¼¸¢,Jºv`»ÙaMIÛôt]OUä„iÚ /O}úô)½xôò#¬•)­™U³Id…ÝN¦S.—KaÿxÉ:º¾Ç‡Àn·c>|¹*+¬,=·F±‘ñžI=Á ÇGÇ¢¶NÝz2!"ÃýªºNº�<úa@ié™$lmŸÕÆ ”ôõd¨[Pɪiì'Œ-³,F]Òß8ç軂8Ø”e5;™M¯�¡mZˆPå%E&Ú—édBU”Â&KÕ�5†Ùt¶/0™L¨ëZœª’ÃãC&Óirñ•i�yž£Â-LÖ4 Zka&"…6&5µßc³mùÄ'„â«Ãk2�R”%»Í–,A‡&Ñ·3k¥ÒQb›[q–±rÝÜ0åÜ»*'5©W6²‰b“¤H¢Æd42ìŒ1iºíè¡÷ˇž»L´»�g”’µC*DF“ ·xkc´PˆÇÞ€èÀt"?Ü: 0B^ ncÕdSÅ4.p:õ·F&èþ\¤ÿ�z Ñ—O 'ˆÛÌ&zµ‰}j¼{!XnÖl7[ÖÛ­@\EÁ|qÀt>Cka­m6[ºF̆G£Ýýw‡DŸ®È³7.>¸æ½wŸq}¹¢ïxÍòfMŒ‘{÷càÉ“'ïyðà>ÃÐÓwÃŽ5Æ&ᨃ±G›'ѱŠCÜ'©mßqïÞ=š®cÛì\ éz0F<Ó„`…�oF×¹7ÆdB&.GFÇŠÄDUòLï{r$ ÑØ4†ÁõL§5'§Ç,S\ËÇëM&¶Û%‹ƒºÈ¸Ù4‰ÿm±ºN0‚Ø9h"Ÿ}í3|ï·¿ûÿ«êgܾô¥/1›ÍY®¯™Ï§(’ʪºàäôˆ·Ý;( gg÷èÚ�ݶ§ïJ&³g÷ÄGÍG©¶›“埜bLFïÉY#ƒµ´�‘�ëi“÷WY·UIߣ´ÞŒ1é•LØ»îúÁI†�÷Ü\]ËïÎ"‹ÙœÍn+PÞ� `$(Œ} ¢¦*¥÷â‹O)�%þÈpNÌ<Ï¥Ò3ÓèöïÁÍû¶#×ò0��p2™°\.黎˜‚jÜnév�Œ¥ŽPæ³É”¨$Xn×êºÞWJ«Õê…L\œÍ‹ÃF§g¥ggg(X¯×4méÏ”eªþ*c¸¼¾âéÓ§L§Sʲd:�rvvZ‰3U¦»ÝŽõzÍt1g:›QdÒ“û‚à ®ÁmÛJ 6¢cé{ñ[D¿¸è{nƒBP²¸§°‡DðªoÆï¦RE¦H ·ŸëSßný»UÏ <¿OÅSadQê$ ¹Ë¶ÿ®”B�Ú3n!@¸­¦ÆŠjŸy§Ê//,·Ÿ©s[Ü~÷Úë}[¦1éÓ¹»‡®V_f©M±ºnð\^^òüùsêºæì쌓“&é­Ùµ\ãí†Íf'ñ¹¡ª&TÀf×îÉm3°^¯ÙmbÐL&./–Ôe…1»]K–É I�a�pK8s„d!"ÙhÛ‰£Zv»EQðàÁ®n®ùÎïü?òùÏ¡2Ão}çw˜-æ…>Öé\[mF˜v1UßF)Üxnƒd#%YÆ£RÄ+W4hˆƒÇ œKÕÑGØ>´Ú -»Ý–¬°L¦f‡žsvÿŒG�òòË�xüð:!Ï+VË-m礴ݱ\^±XÌÙí7°\Ê$Y¥á¥‡/qxpª¢ ÏD$§â_†Xó+*-\6Ë÷{]U¨©©¨è»�膮“dPkÎ?ø€ùl¶·šY,„÷ŸvÛí–Åá�ÜèJ\.†a ³“z"C)»Mc�z¯ãÑfo‘oµA“ª¢„C_ž_°¼¹Iz 1Rf9«å’óÔäéâeYR×µˆ¡1”EAôž‹‹KÎ?8§ïúDÙΓ–bùÀ~1ÐZSÕ5«ÍЦmhvip˜Ò¡@‹§ßáá!Õt²‡áT2n=>>¦mzéûž““ªºº«Ö\^^2K뢤žÔ”‰p0�N…RE“Õv��,Š×hkö ÂØkÜ­>w]7`­÷|F]Õ¢[óNz¬Î‰–¯¨„ý Eß9Ú]�ÆR6«†²ªiÚ†›å !z3²,ãé³÷(*yÎQàƒÇy¹Ê¢Ã’Ñ*zà—úO–iUSV6³\\^rt|Âl6gµÛÐ9Kas›¬†Ø ´­’îšNçP®‰øþ�÷^$ÞÞc~¼žb@%·n5ÞOZÖŶmˆ1û�é†ýoÿí¿åääˆW^}Y|�ÚŸ|øïi¶;ñgZ­h7KÔªá«_ýê‡}ÜôÛW¿úU¾þõ¯ï#¿Žš2+Ù5-ív`>�²v[–Ë%V YÃ{v¶Ùí˜ÏJº>p~~ÉÑÉ!÷îßçìþeiyø‰ûØLÆ\ä¹]‡Aª' ™h”fØ6ì¶¶Û-Çǧ+,›Rô„ÖÐT5Óñ”bµ¡k=+Ë ,7+¢8&Œ"Ò4ãj¹âÎÝ(ÊŠ¢¬ÑÆrv~…±qšñö»÷9¼qºذ)¶` hMï60ÄI¶*¥5Ѷ޳!¦´Éh$"“a «Å+P7µ°ÞQ%i£1Öд ]ß‘å}Ûy¯CJWµXeç#L�sq±ä­ï¼KƧ¶µ4mËàh@Ì—+Þyûš®'‰SÖu¤iFݶ$YFÕ´4}Ïã³3ë5:Àj¦ízP" è�ær¾ n[æËE%ÕSU�a2±Ý¬‰ãˆ¾i¸}zÊÓÇ�Œa:QU[.ÏÏHâˆ8NØl¶ÄqÌÁÁ!N)¢(æÉã'DaÀÐt¸¾¥kjò8¡-KÜàÂ�ÅbAœ$˜�A±öl17 2ÓRšÐÈ©·Ül™Ï/ “Pæ#ƒÈ„ íjÐh§ smˆ¬˜‹'pØÁI0¢ë]çè:ia)½‹4wàaÓÔ;£¬´Zû¡ÁZ…Rƒàšúåón„œ€oñ’ìk a`ø°ó›ù É!†Je�9øÙËœzÒùÐ aZ+qîvÕºoKû×Ê(AËtN샟‘Åš¶¯iºJ ö“”c¾¼àéùª¦$Ncò4ÃóÁ!VóMÕ2�QÊqöô«Õ’006£èÑz m¶4õ–8Ô$qˆ5 \Çì`Êx2˜s±•{¿ké3pÝH;>вQFßuÌWÔ]‹Òí^Õ 'Ç7i꫊MA[·œ�pöäŒéø,–+&ÓË%q"Q*ÎI¶VÓ6BÊðd%ø¶º¯xäÏ}0 Gó8‡Ti•ùÁ* ‡3îܹEšæÂ&›LI§3>ôÆ'Qq‚ "ê¶gqvÆ«/ü.ŸúÄÇŸ{1òäÉÍ«óƒ^ïç±|êSŸâÿú­ÿso¼ Ãз9„BÖW>­Rt]ƒ1ЦéA^yùe‹‹=íy~uÉl6¦. òQÆ(Ë麎<£�Yz×e!óÍ’Ëù¥ &HÈÒ]׳ޔ¼ûî²,Ã9Ǫ( Âl §|4*°¸¶¥öqÝ�“,ÉW©ˆãØ·¾€ÁQ—�7FÊ ZÙÀ“q;iù×`ðóŠØŠÊlwÂvmmzX®7TeGšŽ©ë’ÅÕ|É�ãCЂuQÚdžª’>xÓ4ÔUÃÐ;ê¶#MSLÐÓtŽªm “ÖÏJ„È»S€É@úÛóÕšåfK†¬V+ê¶áôô”ÉÁ½ƒÊ3Óή$ÅuéçJ“ш8M±6 ªjÖë-Aœ`€$ÉÉóŒÓÛ7i›ÊŸ¾a:ZK±Y±^-ÈR‰<^-—¤yÂd”3� ¢Ž›õl¼À ¿Kê�üF’E‘± „qJ„Ô­¤žŒ'TUÅåbÎ(ÍÚçNÅàÙø�åv�$q¤Mä†å‡*¡÷y´uÃÀ X%'Z× $ácD,¢ôà£Ô}Œ‚–´dœkBùöž¨Ú޾w>žaG]ÐзrÈñÃwy-¯ ªø÷SÒÜ=ZÆ9!øvåŽ'·»öU^?Hô¡¯ÒŸý»g/¥¤ºßWð®ÛI¤w@>I±:§ï{.ç¼ûî»DQÄ‹w^æÞ½{Xm¹wï]Ó³^oÙ¬–dIÌÇ?öîÜ{‰ßù7ÿ‘aè E[×Dܾ}—;§Çh3†–ª.i›Š$Í9žÍȲŒ²,¹š/1�ÅF¡g»š¢*¸¸ºdèÄ�é£ÑcCÊ¢àÁƒ|òŸàÿþ×ÿ Ž£ƒ#n�Þ!Ïs¾ùÍoÄ!7oÞ¤nò|Ì "#ÈŒ©i8­ˆ“L"Ñ‘£²®é†�(Hu¥œÞ·MŸçzÏ èìê uUà†ŽñtÄx’²Þ®Hó”Åj‰Sp|tÀñt¿ù?>Ïÿü7ÿ¦ gÿŒë‹_ü"ëoý­ï •ó¹Ï}Ž»wï’eÙûúïu=zôˆÏ|æ3ÏÍŽ ‚€ßù�ß¡(74uÅbyEU8zêºÀ!˜“ è|¾¤, P�ä1uU’¦‹å%£,åèø€ÀŽ�q}ÏtzÀ(Ëö ¨¢,Ùn¶\-ç ›bËz½‘vF/½õ«ùš·ß~‡ù|)ìº$¥¬K'àFT�°áº¾æ•�\Žãxª)«†¦íhÚÎwu5“ÉDL&Sé ;‰æPJÉ á… Ã <«8Žéý´£v§‰ ^mQ7m#«�‰9K¬‘“ïf³" ʪ ñ-¹²,0F3Oèûžóó3Þ|ó)q wïÞáÅ_ðï�%Ž#Ò,Åš€ öÝr¹¢,K‹9ççs´�ÉdÂìPg³Ù°Z.%¾Â ê?Ž"ú¾g4ž2�L蚆ÃÃcH’˜ùÅFkÊb+ˆ¡NÐ@UÕ0OH⌲*|Œ‚Û¿æëÕ†ÒW6mÛ2;8 ky¯üpßjaŒ…6$ #=|D„ aJ€Y/òöÅbAÓÈLl<£•f½ÙPWµo©Hx^d´6{´‘òFÒ�4¼wÒNœ´°P%!æE¡^t]E×Ôž6ÑÓ·=®‡ÐF$qJàážiœ�& ަEWDBUp £¤Ò4:À ;e›^æ§¼òÒyN!€s{•èŽ_¸gúCȳ³,çÿýN±ö]×N&¾Û”¼¿gç§ÙIô»¶EC§a$B™²d¹Út£ˆÙì�ƒÙ”éÁ“ƒ aSÕ-I’ñôéS:l 8:šñá€$ Ùn×ômC7ôDQìùŒŽ®wòzøœ¡0аÆÐ¶ e)¡|nè0F3™L)Ë’0ŒÅz-=°—_y•û÷ïsûôŸ|ããÜ<½¹o³u]‡±Úƒ„%䥄4E�DÂ(£éz™ýj®£QœsÞø.È'Qgú6r­0Oš[?}Äj½ ‰C¢Øòðá»|û�7ùÒW¾Âf³& "FIÂÿö�þ¿ò+¿ò'2M¾÷z,úý„Ò}ö³ŸåóŸÿ<ý¯ÿõÊ&4�ÞÀt:�ò¹Ï}Ž8£Ü¶ØbôÀx’ û�FŒ&97ŽŽYoÖ¬W+PN²wšŠ|”2JS^~å%f³)]×ø¯k4mÛPW5uÓRW�_”Î.Îã€(JÈóŶ¦¬:Þyç>÷>–9†ÉéÅÕ%U] ²§oèûNœé)w— ‰Gåô8 â²â[qZSA”Pžãë‡ÑÂÆŠ£Hn ¯jª«J* ?\ÖÈ\* Cªº¡éæËWç ³Ù”—^z�;·O9<šÅ!UY2�¤oCf³ ¡aH]×l·[ªjÅ�;§Ü¹s‹Éd"J¿€ìXeJiŒ±Ô¾ÝSUyžòâK/1›Í�Çbõ@ϳ³3Š¢B! Ð,M%-Õ\K´Ë² Ø®ìÇt�œÞoÞ¼é Ñ"ÄEŸÌ�6›-óÅ•À*µ& BÜe%$îÉhÂôàÀ+±„“ÙP�6AÀ(¡µf½XñGßü&YšÒ{Öv»e»Ýî%îi*lÂÜÇô}/í¥Ió m­Hä{ ,s;iµ¯”’ðNæ µP6”6쀪(I µÖ`LN¡µ!KÇL§SÒ4#ŽD1h=}à R•Åa,:ˆÁ/¬ƒó‡…�êî:v}4"Þ%Ð~ïì ®ñDÏú޾—ô°—z»�=@1BtÊ{ßI ƒ5!a0å^Ø"Õ–Ý«çÄ&±^­Y,,¢ÄÌÒœããc¦ÓÒ,e>_rÿ�·¹qrÌkx™{wnsóøˆb»¡i+ºV¢W”Ö ½£©;‘o;0aè޶©½xF”~I‘eQsyy!¾¾<§( žÇŸÿÑå/ý¥¿Äx4¢ªkþø[ßb43tmßÓµ-y~Ö㎢0¦ªy,^ö¿;|îX‡ÖÓ�÷ Õóm@ïÙ‚;½uƒ¶æQÛlyçÍoR¶ gË Å 9<< X_QÌf‡‡‚ºÿS®ç¥Z¿×UI’ð™Ï|†Ï~ö³üæoþ&ÇÇÇò¡òÒÍïçzã�7ø{ïï=×c‹¢HT4© d’$"Ïb¦™p¯Œ"Š×�ç!ibqCEß „Vstû§''¤iH‡\^ž…�Ï-‘¸„ªi}¸]OÝ6´mOšÅ8'`Z(py¹¥izæW+ª²£mEY³)¶\Íç䓘“[ÇÐ;¬•ÔÎ0 }h™¦*JÊEC¥âmPF¸bN’R·eMTVTUƒS†aè<èp@¼]h™1f߃V+yJ ËÕ‚Û/~º¦ô¦ÌŽ»÷nÓTM[aµa]¬1VQVdy¦ØÐ;GDD6à…»w9šÍä9 ‚$j»ÚÇMtÐwBÙVŽqžqûô¦„ÿMš¦Îö²icDh�$ ßþö· CËÉñ îÞ½KÇ{zäù‡ÖNŽŽÙl׸ `q5' OŸ<ÁùÊ!"‘îFdz8§ˆ‚�Ëó+ŒQ”ÛšG¹¯Ñ�´Ø$•è cÙv=é$Gkä´¬5Mבg¯½ò*¯½öó+úa ŸŒpTUEèeã›í–¡ï‰Ód�2:¯ÕÆúpS A[¹ž8Љ¬¥®¡¯+ú�äžÞ«±d>ø÷<À9ñªí)É6Ü/öÖhZ70ôè€Þ�Aæ2NYN~ç´WÐAÛK›W)…¶ e¯•n{c­—f ‘AT€ÖÚ½qr/Vpõ£O“Ø›s…D­Ùˆ„è¯PžªøÃ•Á J{`1ˆ§©ljª¶Á†Ù(g½Ü°­ ù¼¯=½é#5bȾsTeÉt:£m[./¯8:˜2Ê3ODec$Î!ðôå ¨‹-“Ñ­ iZú¶§,JºVTHIšîùœRô��©«ºÞ/MÓì«]¥Ä¯d¼Ù6°ir]á�Hp“4a4{f_Û5¢�S²²ïf.çdƒ0¾‚i›Î»ß n`O8†Ž¦i¡ƒ}üw'ÙbA QòÊ(eá �®£w{ä�¼ÏnØ·àžuå?Kmx–¾ðì¥0¢ˆd÷ÿñ’ôëßƒi=b·™I�sƒoKú®¡E+QŠì~<“¦)mÓqyyÉÅå9——ܼyÂÑÑŒ—_|m ©¶¤i‚µ†º®°FØc,q”�$9np4uFùp8fDaÈÁd*÷‡?`ÔuC`,­Ïàʲœº©hꊾíøÈ‡?¿ü—ÿ¥à`zÀì`Æ£G�ø£¯�²ìÎX‰™I’ØSL,ÖXÒDªMÓø5àšŠ!›Õ5ëOiÍPª¬ MHÓ7 ÝÀf]G�Óœn¹¦X¬¸ÿ�ïP/6Îfï¹`ÿ06uÇ®Êú¥_ú%@`¡³ÙŒããc~ê§~êûþÞðü•ÐÑÑ�¿%*0­}û EkCß;Q& Ž89˜MyñÅ{hqy5§i âHQ–[òG©:Ú¦&dshÛ†;wnÑ5-Qr4;Üû Ú¶eµZy¯�¢odñ�¢ke<=U0´h-á]}#꺬جÖl6+I²tz×uŽ®m÷FÉ4É‚@ð@c1ÞÖÞ¿•%9�i Ã�0Àë.æ9Åð( „fç3h«‰’H*(k%nýY“¨2ô�#‰"¢(’ Éz+ÅÁa”!´C稚-­íÅøü¢A<;ÂM¬ ŒZ`™g > çDÜÐïæ�×IÛ,D_ã{v³žg6›g«ïÝõ'L¶ÎÏ9Üuâog´¦z¤+M`4ÎÈ|®m{ò<õ9<ç쌚Zkläc#´°ø$wʆ<óvUüç?øBÎï+&“øÀ«„¡e¹¸â�wÞA+Khm-9TJÙˆ$J¹Z_H±7üî%ùý@ßUûj}Pж 0°Z-xùå—ùÊW¾L]6|âã¯óäÉ’4ÅÑóäÉ#^{í5æ+™{k‰ú€Þw/‚ ÀØkh®¼ßRiŠ2×" ¹wh”ºïü³®÷Ü€ª²åÑ㇤IÎh<âé£"<¸y—È$Œ“™�yrö6wßCEöÃÚ|ò<—á°¿~é—~‰‹‹ >ÿùÏó[¿õ[{¢ër=Ï&4�qƒb¹ØˆÑQ)ŒuÔµc³Ùrã¸ATY]+  1†Ó[7™/—ÀÀãÇq´Ü¼yB×uû´Ø][k]lÙ,7„qLÕÔ85�fZk&“œ$UDɘղ$Í2º^pð&”Óú­[·Èò�$�ézI’Œ ¼Û·»vð®|‰>ÃHzÎh>|HQÔ£ý|C3Î…eÖÖ�T2êšAæœl¼J)OB¨Šr?Šã�Ë«–õz…sŽõzAšÅžPUýþ=9±ö½o-…!«õ–í¦b6™2™LÐFÚt²Á@ Ô³iš}òkÛöþ&•SÜr½ÞNã8f[•ûßGQDY–Àµ#—Jå”j­¼ÑÎQ”%J‰L×9Q&M'cVë  EÛ9ʲáâbNY–TuI>Îyá…;LÆ@OÛWıä uuK7t 5M×ÒõÆZ Œ"¶EÉìh&B�ù•ø@ŠÞ»{‡Qž�¦B�VÞ(»ó5Áw»ök/ œ£òoc5³ÃI{„IB]W,æâ ﺞÑxLQÖÞs ©›†·ß¹ÄQÊj³áàð�ùbAïÍqNÉ¿-ÊŠ¶üþáñuÓ’d)Iší|q£�æðð�8rõáÑçççô}/-©Ý¢3ȉ²mÒ4e½Zr||ŒÀF—Ìf3PY–±Ùlè;磫5qœF ËÕšõfËåùaQVÛ¢Ä!}×ÊÆï@±÷íÄ&)Ê’(N0Ö �f³å\’¦T�ð¿–«Ê1*�É×Ê/¸’ûÓ4�ø¬Ÿa`¼ÌöX «å‚Å|Áøà€®íY¯Ö²ÙlyzvF? ŒFcâ4â·ÿõï3ž$€a2�aLÄå导ú*ç—¼öÁðÎ;ï`C©ÚšjIY¦PER)oŠ5A`é]/†g%U„T‘!yž�¥F)ª¢ÚwB‚  iš½¨ªªýùÆ'XoÖ$Iƒ‡e}ˆ¤Üt­WÑiŒÕ„A@]Õ8‡¤µÝg‡µ�„I†aH’$”e-³ßÙtÕØ‚{üø´f4eÑqy~æ‡Ê–,°¼X°¸šÿ ]ý¯ë¯þÕ¿Êoÿöoó ¿ð û?Ûµã¾W˜ðßóªë–ª¼¢iÒ$!J./—,× â0`4>àk_ûùè€,˜L¦D¡ “w=úªÚÒ5ÑVø`ãqŽ Åa,”‹S»>+\Η›3I“¤”ECQnX­—dyÎ�ӛܹu“¦¯Y­7$yDEr#X©2�"ƒáÝ‚Ôû�:çÆ(iï!¾‹ñ$ÇZ!<·U°w±‡± ½…='Ü5k-NË�Ù{)kßv´½ÄTôC+`Ä®Ã9¡h®—^×Q…¯Ð,}_؈ Œè�âñ“3Y0ÞyÀx:Â9áMm6ÒRç#¢$–è…ÅŠ¦iÈG£ý‰w÷½Û¾�O”Ô~p¯<ޤ÷pÇÈJu²“• R'& ËeÃÙù“=w|J, «,£qBU5œ_\Éc4«õš8‰ˆÓ„8Œè¬¦õ•ÐŽÆ‘ä µ A“æ9Ý0°Xm°�7 =Õzå�“�×á@+ïr¿ ûÅX»go•ÀL�1tÖb±uéãF,«Íš®kÉÇ”uÃÅÕœÙd† ôj#Ë>p›Ñô€PÇœ]\ðæ¿K7(ú^Q5 A`¨Ú ê®åå—^Ø/VËÍš–§©+ÖëFèm�sA`•Åëþ8Ééº�ÍrŦ,HB1vÒµ´ v„§Öcy4»¶ãõÌgw=»n퀴Àžö±#SƒAœò•——ˆ<¦Â·ã´ŸÊ¿u>UU;ˆ«ˆ]®c:º¶Ý‡)*ªÿ!ø€Þ~÷1J[¢0¥w°ÚŒò)išs0=äæ�Sº¦ãâì §·nò©O}껾Ééé)o¼ñÆsKœŸçzíµ×øûÿïóÉO~’ÃÃÃýŸ¿þúëß%LøA*¡]Ûð½*·ßýÝßå;o¾Év[Ó¶=ƒƒ$Í lĦØò½IÒœû÷¡�E)ëóƒ,ÎyŸ‡˜õ÷Äæ]øŸ�$m°s¢¹ïý°%*6ä£ ÊXÊ¢d³)èú†Ñ(ãö­&D‘e:ŒqŒÆ2TÞ)¬¡a <’]+v>q$¶¹§ïZq¦MžfLF#¬QŒUô}G×wh#e¶Pv{š�CÇàzšZ¸P­�’V~À\×5MSí_O¥$N%¤äÁ÷‘‹¢"Írâ$ÆËtrHFœŸŸ£¬¡, SZÂ8¦©lQlKÎ.¯hê†0IhÛN’•fpI ³Ê˳Ï/θ¼º`<aã½$‡!ÖŠ2ËÍ(Me×ÔÔMIÛuØ ËsÖë56Ø"äPÖò�o‡?úÖSÖµ¨ÎB¯ ô [?Hö’ Ú®%Ë3’,¥i[t s€ª©yüä)Ûb Z7 ¬a¹^³­J6U!Õè •_Ûuž#&îþ¶x¬„êÐõ=Ý ï_Û÷ôNøp½õ^Uמ�¦H“”~€'OÏè%í/­‰cÙD•Òhc‰¢˜G�ŸòèÑSlñøñ«%gçg$YB’F˜@ƒŘõaoazH JI•Ôµ€ˆevb”ÀhŒ’¤Ñ®“A|Û ùÚK®ö‰°;–ÚÎ;tý¥1Ú3ôN©%ÏÔíDvnÏo— Ü >åUäÈJ_'¿Z%œC¡*Á^á0Z<4Vë�j£V 1_)éft}+1ó Œ 06`vxÈjµâþÇ\]]a´ar0áøðˆÙáL¨¡Ð¬ I¢„(Œqªª¦iZšFØo�O²6Ú ´0!‡n ÜnQ F㜃ٔ7ßzS6ËîÀÏïdvi�‘‹ ¼Aáðy?�뺶§k»=�Ð(#êÄöùHï¹}ç�´mG×”e� ,úЇ¹yz›ÙÁ!£l,ôÔ®!Œ>ýéOÿ‰oô~ÔeÏs%I‹/¾È/ÿò/ó�o|ƒ¿ü—ÿòÞ@÷úë¯óøñc~ý×�¿ñ7þÆ÷µ =ÏÌê_ý«Åý‡¨ª–MQR× :°ŒF9óÕ‚[·nñ•¯}�¡ˆ³œ;·ï�å)£QLšdy¶/y£(Úo>Aùèh|ö¾”œ¤ Zm lˆR†ºnü ¤cz0åÞ wÈòDÔuCK’„$q,7�ÒX-Èœ]û@zÜÆ·,a1åÒ*˜Œ½aÊÉÍ‹",�c’(ÚßÔQî r Uío¼eç—Â�m)Õ²î\]×û¼¡ª¿ëQ�U �=F!`ÓªnQÊŸmA”$Dq$®mc(«Š¢ØcÝ4}‡ÓŠÈç Α$‰Ì‹‚ûïÞçáƒ^41šŒÈG#’8¥i:–‹¥˜�ó ·nݦ›Wèµ]+4†ÍV¬ö&å·ßz›ÙÁŒ8Ž8{úÔ·"e ¬´ØÜ00à|Ö—¥ñd`¿Ž8¯tÞ¤x£³Qš®ù[pI6Tü¦ðmͦÜ88ÆuTƒc”�8;;{ÏEýýølžçÚ À¾ð…/ðS?õSüÈ�ü“É„‹‹ ?~Ìo¼±${?×ó &...ÄC ¤DmûžË«óù%qPÖ5÷ß}Èx2bb-›¢ Íbúa�5ÁâhR €u×2ÉrŒ $FùÑI�œ6†¦¨ú·©H’„4Kˆbic•åÒ!‹�ý/èÊÇDQLÝV;²WZá�„b&Ü!y$Ú!$ ds²V³mkÒ<•<ÊožÊh‚^|MÁ¬µ´Fú¾ÔL0òƒÞ?eXoüÆÓÇ¢Â3šfËüjÉÐkDÌñp{Ál6£©{žž]rzó]Ý0唕¨èl´¦Øly÷Á�ŸŠ1綾^ ‹ùh$-�F¢Éßzë-f³™D%�FûÍ¥o$z[+i{lÊ Æ¦‡©±¸¿‚²À„Q{™¹E eS³) t`lÊ‚° 0¡Hȳé5ô, Ú¦¤éýk�´ØŠ¶¦¬ë5�ÏVMMOÏÍþ:�hÈP9lÒ¹AX‚ÏH’ñ ¸Ý�@EêÚãs‚œv 6ó¹Ì÷¬áÑý‡¬Ö%iœ²Xm©[eتæéù%£ƒ©¦íz\ß“å9£Ñ×õ¬VKžœ=a4�0žL8>:âÅ^â¥{/²œ¯¸<;çþÛ÷™L&€" b´1hk©á<. ÆÉ˜q–³Yo0ÆðÕ¯~•�}üu>|ÈÅÕãñx/ªq888{­4ܵàb”Ũ×É 7 "âPÄHÕ¦~®u÷½eØaè&cÂ8`[,öŒ¨¦ª MH†Œó1ßøã¯þ©?䇵 í6‰ßüÍßà×~í×ø+å¯ð¡}ˆÃÃC¯ØzÿQàïG­÷àá¾l¤¥â'a¤ùàG^%Nnœ³Ýn‰â€�îsóä­·XQtíèÖZïÑ]×]‡]E²ÉöMCëLïPVˆÓI’`4ÔõÖ{J’( lmSà™OË«%6DQ´—Kò { ïÿ0F¡õ€µEÒ:&)jð<ÿÑJŒ„ZÓôÝ~`»Sí†ùJ)f“ñ>õSæ`Õ¾+ËšÔ÷øû~À š ˆ(ËÜçëUé+"C¹Ü’eMSyå’ÃXQÁÕmÃåE ¶EEžçl·[ð´nçÜ>»f½^sqQÓ÷ç¼ôÒKûá6@�(‹缺.ÜK]eVfˆÓ„¦m2© КËùœ¦uÂìÃPV²ð$£[78£ˆ¶[ú®“tÔ@fHF[lÆ«õšã#P–Ì—Æ“˜^ÉB†ÑÒZÓŠª•Ú]È[ ½‰ÐÇ,ìNëà -+¥èÝgÏωúóà=žA”€1lŠ’¦ªAš®§êâÈr¼^á”"�©Ë†ñtB–çÔmÇÑ�cŽOŽe)u[óàáCÖÛ§ù1] Ûm%L?c|\F€1ŠÁõTUÍåÅŠÇ�Ï‚€(ÌÈŽsò,¢¬ ÏU#‘Ù&ð™Umã10r¸�ûe@6\í )J¢ $ eîÖïL—ºG;�ó¿ƒo]‰�{/óö¯ŸUz?¸P~£“=¦ß7w†N#ÎØ}б{¶=è«Ô]FÓÅÕ%™ZT¾ª°Qȱ?m+©W‹Yœq0�2Ê'ܾ}—““SÎÏÏq�£Z¬ 8œ2¨�¢ÜøŽCÉâòŠÁ“;ëO=æãÿ8_øÂ¼PÅ‹7Øù¢dŽ«:#ô Ÿ$fT™«Éë¡p½CòšØïñaýi×{¶à]Ì9¾qÌÉÍLhûŠéÁˆ8ŽhÛ†P[Ò$ÆXÅûÒùÅ_üÅ?Åóƒ¶ã~ï÷~�_ýÕ_åçþç9993ìlÆ?þÇÿ˜¿øÿ"ûØÇ¾/ÂûÙ|êºæsÿë糄ÅrE×õ(kMG|ø#ääô„ÅjÎÅåËÕŠ“Ó›„qÄñ�Q¨…1âÀî½”´ó9Ú/~»æIÓµôÀÖ‹%K³ýP»®J6ÛiÇF,ƒïÅ")¡I”0tŽÅj��,>ÌY~Æ®E£Dž[[ŸvÛR×MÛøyE',A ¸Î·×ºÞŸLýóö-‘ëPíE u}}*êº^¼ ÆÒ4 8EßtÞ`y5_PU ›¢ ¬Zê¦Ç¡°¡%Nbâ4f[nyôøh8½}›8I£˜‡�Þ%g¼üʫܼu‹£ÃCÙœ=.g¹\zÅOÈÑñ˜ù‘سìÚ¶•vËN˜Ð÷乚UIççq³ÙŒÕjMÓ¶äùˆ8I¸¼šãœ x’,£ó7n;t˜@ÓõeY°Z®¨êŠ sðrµ€6l«’ ŒHG9‡ÇÇ$YÂx2b4Éâe´ÌŠŒ‘×ÝWi6�UFD¡øv"/‹G;êû™† ,p(úa ŽSê¦EÃx4e2: *jÎ/çØ@pJmßsëô&ùd,&ÞÄ'S©*Ã8áÖé-òɈ®kÐ�â[ßú#ºÁQ.JŠ¢âÉ“sºÎaLH×9”64m�r†åbÅùÓ Ö«-]#òk£DyUöm/"”ÂX#†G?ÿÙ °v÷�ŸäìwàÈÄQ,‰µFf}Cßï’Í39T{á†?íK°ã€q275Z”s�±þWioGAHh5¸ü<7ˆúÔø8ŠÁI|Á oJK'%ŽSÚ¦a³^Ñ65aÅfÃãÇ�Ø%q”0É…‰xu1g>_bµå`6åèèˆ4M|ÒnÓÖh�K²JB «¢ Ërʲd<�pyyÉ�»w$>ÁÛlÑïŒÄÎÉg= üaL ¹npÐ;1ŸïüPÚîg_®(k÷ƒÍ€Ú^}åîÞ¹Çt2æÁÃw%ruzˆ5voÜZo6,–s^ýõ?Fúì&ô~`¤———üƒð˜Ïçcøò—¿Ì—¿üeÎÏÏ9??çÉ“'ü…¿ðö~šç½=zÄßþÛû¹«²¯ýëüû/ü>GÇ3ú^Ì^ÇG3~ìGßàÎ�Sª¢`½^rv~.½(&PWWW$‘ÐÄ*¾Y–“øÓ`’¤B𮕲Çj6DõŽÞ—äJ!-7ˆ—¢*é‡�¦‘2x4žÒ°Þtƒ#Í3?ô¾v�ïƒÃ¸ÛU;ÖSˆ÷HC±-ö²ícl磷´TDÚù�+ðÎ{�9kö^뇞» ¬,K‚ F+â$¡­YÓ7r#%IFU•,—sú¾g³YÓ45———Ü{á.Q$›w>|À�G|øÃäøðkš�ÃÃÆÓ1I3;˜2™NÈÒ”édÂx4"ót…(°L§Æ“qbÀÕF ¿ÆZúAdìgç8ëµ0Ù–Ë•´Co}+$ŠÕJÀ°}/Ê®ÕJÒG릦î”ös¯ÒÜ1­ŸGì.’­"Æ×ãƒy–’$©'8 Ò†óÁЋ<½k:ªúš_7%MÝàú·Û˜<�Ó(%Äz爣„8ð W_Ià�D>”MàA‰š×z— ‹÷â0$Š#=mÓѹXÒ<ÅÚˆº©=¿°#ˆB0p5¿äÛo~›¦k㘣ãC¦¤iæÅƒT©ù„[·ï¢”æüü‚À¤YÎÛo½ÃG>òQÊ¢DyIzÓ¶tí€2 ­åç;'s-)IõãzŸ†k y–ï©ØnpϽ½g¿êÇ?ñ: ˆ•¡j{¦Ù”fÓ ˜M¦2ì$¨k”�ø/ÿå¿òÑ�~ôÏ\Äßxã þé?ý§ï+Žáðð�òOþÉsÿûç½nݺõ¾ËüÁ TÏÁ8Fß9æ;ßþxåÓQHU®˜Œsž>†ºhxáÎË,W¶}ÃíÛ',VÚôŒÇ¹oO5,+Œ¹.ü&†–¦“ùŽÒÂìÚŽ4iC[WôÖˆJ1#jY–$ÙˆÁV•H˜uì�§Ý@Oç¨;)®gBR)mèz?sò‹g?ˆ·¡m[¢4¦v­Ü­;ʾ––�òU”v’Ä)¡f‚÷¯šš¶mI’„ÁÏGv`ß6´Ã@h uUìA‡¸š—_¾Ã½þT†¡Nóÿ~ñë´Âf¤ë+ŠE jàÅ—îqzzìûýC×ò©ŸüQ`À Ã`±¡¡i;Öëå~®Ë‚Á/´ }+ÆÒÀ(´±%‰¡ah©[i5­à‹ú®Ck˦�Ù®ï9éÐ45qlY¯ç;0Tpçæ³é˜<ÏØ”…7ïf]Çz³!IŸa$¾�Õb hÊõRØy­,JV)\×2ÉR’ÀyêÁžè<8ïòw(%s ¥4`ƒÐËŸÅ”)$)Î9.æ ÑCö5� °ª�pàÅo2žÜyáŽàY"1^+×0%~®×�Ä–à0:´˜ŒS\ßq|<ãüüŠ$ e(¯-'''”Û‚ƒÙ„£ÃCÞÝn÷žžºiYo¶L§3‹ÛªcùÎî¾tcº ¤÷q�B++ÑÞzM¿¶ûŠ& ,O?âøH””MÓ�2˜0¢)*º¾§ª²ñˆ¦*16$ŠÁXá¨Ë‚ áŽ;wç9›Õ–‹‹ NŽNxøð>Y6ÂE–Ih\Ý5Œ§#¢(àéå£tDã矃oáFF¢Jú¾G»c¬t¬£ØV”]…³�FPÓ– U_š�º«¯E2‘âko}�ôiÎÑÁ!'Ç7888$’g%eºe~uA}¾ÄZË+/ˆÍfÃý·Ç!�ß}Ì_þ o¾ó6�Ξ €u$Òü„G%­¨+�Õþ>•öºµ–¢”È“ iÊêO¬�ïu½ç”'!UÕ1´ Æ ¤al–k§3&“ ]×ñꫯðàÑ}þÓü�|æ3ÿËsýÐÿ¿dÁû{,_øÂ¿'Š4uµ! 7o2Êc¬�Q˜�gSò<çöé’$ÃÚ˜ÕrMDhPuÕÅ!nPÔuCœ„{w¾®e¡»8éKlàCË"²Cˆ(eÐÚ¢PÚ¢´´&œ§½eAâÞþÞk·ìM‡]v¼og*e$µR€È{˜£®q(€äþøÊg7Ûys¿[ ¾—\ °KpĈœÚ�€Æaù‰ÿó|åkßàÍ7ßDé�[·o2›M�sº¾%4¥wƒx+2[å¿Ü@G~(¬üf?ìUTÖhz}ýX ë[´Ót}Ëà¥ÍN�ö•œ´Súý\Jž·&² Ò4!Š’4b³Yó ÷Èóísu'~Ÿ¦iX¬6<|ò˜étÊt4&#ÂÁ[YkÑŸ{$jº(аžÓµ; ìZ&礔o�FÜò ©³Öâ”_¨•´›š¾c6ù¼'OЊ0Œˆãˆƒ£Qy#¦”úáÚ€,p`#Ÿ4jéº^_�ïr9çÖé©°üñ¡m:²Ñˆã7QˆYË�­©ëZÐ/K™\\ž£�ãÆÉ¥ÅfC`Æ( m&㫽ûšøß@ü†¤¼îZÜùÓ�ë¥Ê¼\TƒëežÒ5RôÚç}HwüÙM¾›©¥ü¢Ô÷׊6k�˜ÐØAŸao9éc+s�/‘Ç"_Ö/IýnHä{¡Tv¿î®�d<�¸{ï6a$œ­‡Gä£Ô›ñZ_•àOüJ.$ŸG)¡sýZîf;J Õa×þ|öµy–/Ö~öà7›�ìWiyñvi�Ï�DËxÇm++Šíz?Ü5F6Û 0äiLÉÆ¢‘ÍÑáeÅN£Ñ­¯s˜ÐÒvjšvO$—ÏÈ®:øöŽÄ\;DÝå�¶Šbœkq]/rhÙµ¶Dh32cʦÜWé}ß Yûð8epýõçB)åÕª “Ù„vhÉ£œªÙrptÀÅü‚¼JA‰çÊZ9�åäæ NNo±X,�ÇXk™ŽIbÐúZI¹ûl8ï«2Æx¸n´‹ÄqŒÃ±X,P£œ¶Ù`ÚéÁ!qamƒ±ò¡iš–ºîöd…~è<O¢7 e:–¨‹ÀÆTUË“'Oyðø 0�„‘T¶Úq�LqZS”!´kæØþܽÙ�mÙ}ß÷YkíùL5Wݪ;õmv7É6I‘´Dȶ"C2d+q[`?±â“ˆŽÿGy³S!92äE‰ËŽ Á�5Ø&$EÒjd“Íî{»ï|k>ãÖ^+¿µw�Û$妨v6P¸u«N�aïµ×oútüLcLèºsÖ§~]…Ê¢#®×+ÙàµÓ¶ |¯�¡¬´TËjÅÙÙ uYqyqFžç ‡×öw¹½q‹éå9——3VËe½¢jJnß¾Ãõë×…—öú×9=?Ã+Ãp8Øûª ×ZÈÙÚé¾òîÁ:MÓÏ‚¿ï4äܼq�Q1çiêšýÑåW~åWØØØàìä”4Ϥœ^­xá…;üÖoý?ýÓ?ýž^ø?´ã_ü‹Áp($­åjIî 21³ù”¤N‰“ŒÖª€©©›š¦n±¶f6»Déš,Ñœ�Ÿà\‹QšùbÊîîöU6d¥'ÜôŽAIæëéåÏãÀyh� ¯VU¯'wµ€¢jÛš6À¸M7�í6U¤êXݶn„Ÿ€ÛFœOã rëÚö91HBÿ—5áÊuî…[›3ÁUEÕý}€º¯ÕjÕÿ¬;ú€å[fóK¶¶6ØÙ‘'(~…9Á/fí5‚«¨R D&é[ïÖ ú€ôn�±Nûªrö9áU…xõç\€¾š~x= ‡‹ù¼×xóáUêÝiÏuºa]EÚIî§iLëÖ CßZ‹# ÌýÕÆ%Õ’HBy׊Š–Fµ�PNÓBÐ)Ã(œX�Š~YjR]wùFÀ-¾Å{ƒsrž4þ*�yòøº”lPû²‰U1ySÖ+žÜ{DÇ\?<`<2_.Hã ´'d ÇCZßrxëF° p´vŽRmÏsz÷ÌGôÿŒ‰û™¦1ïZfÓ9—'gý\órºdc{ ‡§²U¾ÚÓÂóDQFd2–óeK"“Ò4NÈãIÁt¶âþƒ'dYÂÞî®T”j+ß­¥ q–R-V’„÷Ö]ç.ééÚ‡ÝZêŠn�¶m ærÿ{'B¸�e†÷)’,#Or´�hmÍÉ™˜ååyÊ|9e<‘')»û;(¿Ãt:e±Xðÿî8::b<™ˆÃk3›Ï™_NÈò„(¬ñ²,ŸCÒv\¡î3cxo ì?$ òœr9'�2®ðôô„ëG×ø³?ú#\;Ü祗^âÆ�|ý¯£”âðð�_ûÇÿøÿ·èý£„£aUV”UÝ#ºš¶f¨5u#V¼mÛ’2ý)Î[ªÕ‚He®Ti\# [ÑYb [;”ºèÀÙ¼&IR¼S¸Ä¢‘‘– ¢f»W­#´ä½(¯Àé Õ$ÁGeÅÚ¦ª„°ª½(ݶÞa‚œIݶˆÊ-¡“'òöJ‰#b`@„9“Â;Õ8��L{âZ¨ÄºŠEÚnæ¹o}ƒ‘l\Ð4UŸA NCœ¤Òo¡«ÎÏßm*ò3Q­‘ŠPwIš Þö>(D«P-t¾3Æ qصª©{Ÿ.èªÉ (ÁZœ×8oúÇ�ÇÃ>»í<|ÚE‹ó†TKU‘B dIÄ?5h�+çz°.›îΛ´¯V‡!]P”îZ¹6geN×*Ù´â4HèG±|V¥Ä95pâؠ5xïDšH{¼7r¥;^—•Ì<Îsœîšk-IÓ:Ëx<^Ú ÆjÄk¯½†×Žº­ðÚ£cM¹[óã³ãJ0ÙÚĘ€tƒ>ßòîó‹ uÓW·Wr1²I/ êUÍ (¨ë–Úž`½c8„5å0q—щ¨¦%ŠªÒrïÞ}^¸ý"YËÅ‚ºò´N1ÞØf¶X±ªZÞ¹ÿ�݃]FFS5]ÀöøªÚ GÌ‚§÷"�‚Q×ÒíçÄ©û�÷Â÷Ò¡:o½¬ƒî‘ç‘®‡oYœ�å9†ìŠ˜Œc¶˜r9¾×öæ£b@’%Œ7Æ FRé, †yÁþîÞ=Áâ4"Í®P¤|_tk‡(µ®%Ò$z¯Çw @]FX–eÐ&3llli:ã•W^¡®k>ô¡ñÎ;ïE1mëøÊW¾ÂG?úÑ÷üþC8¾øÅ/²Z-ˆbƒ 6¹§Å+T±#QTV²œ³ÔaxÝÖ˦E…²y9_'±V,f3šª"Ž �kÁki³˜®ÇúÞ­ ¿U€‘ÆqÜ£y2c°] Ë[ $Fá}Ô·Rú%¡ Ê lµo»ÁÕ;RbfL0ë©£"‘×_;”™‘õVšæy‰|i Ñ—æë­­®ÚXo»=WE­Í|Xäùnh›®å!ŒöwµøÜZëRk¬mž{îu$ ПËçôá}†~âzK®«ÜÚ¶é7½nãëž[²i‹u5�q_ɦ9ò?Š’v-¿/ÒŒ4M1J¬’뺒D hÁ­ÏÔ¬µ4!è)¥hê6XS ßC¤"¼ñ\^L¥¯4 ¢Q-�R^¬þêü{$puÔ€º)ñ>›1Q€3·=7Ä#-5‚X]ω¢ç-Y1 í(Ï�—îˆçS–¢5¤™8~Îf—TMMšgL¶6©ª‹Õ’§ªâ(#Šs¼o©­ÃºŒÈë¸Ð²0�Ç{I¨’$£^5œŸ“%'ù$$¼výuÓòàá;,%{F‹Ð¬s( *¨­Û¦B™(Ì Ÿ¯àºµT×uÏa\¯Œ®á}KÓÖ¡Ýéúëäœøh•¥ð⬷Ò^Õæ­Aë+ô©­<º/Öù�ýý}^¼}GF Zœu£4c>Ÿ#˘ÕjÚÆ�‚‹œç®‚_W ‘ûâûlÁ%iÁh²�öP6–¼H‰4ܹs›ßù�ßaYVü¹ÿ Ð k[>ðꇸyë6¿üË¿Ìg>ó™÷ôâÿ¡ŸùÌgHÒ(À*5:б­ÇMg,%ãÍ L£½bww—étŒ�rÚºa4ÌÉ3aaGZ“¦ £aA–%ý�–+Is„@‡k`| DZ+�ȇÍÄ jM„– HG‘ð¾­µ%—ýÝ-(‘Ji×·2XkôÞ÷›Ê rB£®ø?¢�“ÇvÄU†ut”B©“PAæ;ªåå òçEuB$L�­išJftFÓ47±í3y�ÂÙ6’˜E)~?6´ÀšVŸºiƒ’D†sú¤AãT¶¡m«’´H)ÒŒG0¶!Š”‘Ï#Jç�$Q�Sr~]+ðZ™Ù(CdàC‰–ÛÕó}ÕfâH6Cå°®áðú56·7ØODNC’Ŕˊ,O)FÖ ñW*T9ïÝÜîÝ7t-Ànq8ž]ÞW]µ´v�ÇRŒ²ÞRº± Ž–Èˆ‘!>(h�Ñ1Z>â�û�i�Üo{»»(åiÛ†óË Ë;{[Œ67PqDÝTÄÆ€’ÊÆ+MÝÔ êPz¡Úïemútýë“B¥h[ÿÜ=Eq¿;#Fï奇mjZë{Ýɪ jâQÌæÞMY1»œóöý{|ó›ßdsc‹›G7‰¢ˆQ1àè౎™.¦ÄÆPÛ kƒ^\$׺³þèl^„Û÷Çà´spDØèãÉ„årIÇdYÆ+¯¼Â×^ÿI’°¹½ÍÍ›‚ðyùý¯ðùÏý_úÒ—øøÇ?þžÞÀ¿ïǾð>|Àx2 j¢ÚÒZ‡R-i*çãòò’æô4,E1ÈX,lmm‘¦ÊËO)C‘&ض&�†ƒ1«rÁl6e0ôý÷nŒì�´}”‡,2´ïÖû‚�‘ÑÏÚwõÆ»TažÛ!˜8Õ³¸»ÇK{L÷Ï«”î]�AZj­üï³æŒ‚úÈsšRô�ê+�þï¼_Cá¹oÛd´Ö¤“Q�LÒ�¶],-Í®§nŒu5ŸYoaTUÕo`ëÃÓõ×éxWë•TxÖ†p×"tWÜ•.–û¶ ÉMdlÝЄY^'Š¢ <õ7pŽZéµ;kñJQÚëíÕu0¢'ò^ëÚEH`ˆ""%ßÕbÆ|)0g²Lc Å;h¬Cµ’Üh‘û÷&@ÎEE»a� úóܺZÌÈÖÃsÉI(±½[mÙˆAáõ뇜�Ÿ2�H³רÀ– ‡h÷¾õ€´Èù–$B ND©c]�,I\˜…tkµ«†â€ªkÛ–(IÁCS·h£ol²»¿OZDÔõ ”!–‹œØÔ«×ú`ÒQÏžS-DQDY–ÌæçÔuÉx{ƒ£7MÆX[¯p! E´¥ë\Ù`-uÕ�&)M]…¶(Û8!å…¶ 'Nb’$EG­TH.-IËõ ©šŠ³“SnܸR*²<áàÚƒAÁ|>£\•DQD‘äYÎj¹¤®ªà=”±˜7ߟÂÆÎ![;»$ÙÛÊæ7�NùÖ·¾Å›wßâñ£'='! ˜ÎçäÙ€¤(¸¼8çî[ßúc©‚žàxOŸž`¢Dª7­±¶¥±ŽA1 õ¢¶�¤)¾õÌsb#›{¹Z‘fM#²%‚p NжrQÇzdZé^ñ@w^,ú ú¼^%t³,k¯ÄL»ãjVÔÒÙX´­AuMöǜϖ+’ð¡tJT�Pûn>R÷Ý€{½]y5CC8é�G}/¼{­õç鎮�½ÀZÇåtÆåå 0²ÉkÍx<ê?ÇÛ÷îqzzJ¤ ×®]#‰c&cQ«vÞóÆop÷î]âHÜI­u8çyûíw8==%Ër†ƒÓé ×¶iÆl± IR¶·w˜L6�'$i8:É.Ë0‡­Å8JÂLFæY1 m,Þy@SYö÷v˜ G Ó”ª,Ã:U \PþnÂ;iû­ÍHÖЄ_÷<9A64M�ޤÕ$ºõ¾z.'A\i|+ÕªòÂ�+²„á`ÈÉñ›[nܸÎÑуQ�u5Uµ¤±•¬ÉÐJÔÊcX›a*…ŽDˆVÒþ¶µxR ‚=¼øêˆŠ�­ªåJ,½#ép(DC2ֆؤDhh=®ñ¤QÊr±@T ­mpûUÔMM’È}Eñs¾`¢j IlGTuÉ$DêºbPäÌfSö÷vq8V‹%óÅ‚¶¶¢"a[Ò,ewk—ÁpHEضåòû­€î½óßZ”wlomðìø„Ö9vv÷ùðüüà«,Ë’ó‹ ©Æ4MÃr± KSFÃyžó~ù—ø á/ô>>ßëñ^U´¿Uë?ì˜ÏçüÌÏü ³Ë ©Ä…òòR8@uEÝ6Œ'câ$a4±½½Cdd¿¼œE1Õ²b¹XqzzÆr¹gRÛ�f ™i dqÅ€4â¡61ÖŠ!V'þÙ´–¾™ã¥ˆ£„(();'ÀÙ唪j9¿˜òøÉ3Zç©*1f{ûíwxðè1[[;¤yŽÖ�³Ü¿ÿ€(‰�'xco�§O£”gwg‡4ŽqÎ2ˆ8ð³§Ï(W+‘éÑšA>d<špÿáÓïOŒô§þÒÎþÞ‰ÑDiÂöîNèñ¶ÌSÎ//8;;ãèèˆ?ógþ ç;^,"5Ѷ|àÕ�ððáþÖßúoùô§ÿÞsîïåøwù ýqŸªªøÙŸû9ΦSv¯í3çÔ«ÓÙŒªÇG 9¯c¯Û°AfYÆÁþ!iRpy9ãüD”»‹\œF%Ë–M6MSÎgs¢(bx Q$•GUW,—K¬sè( -©HæpJ´È@þUJÑZOÝ:ž=;æìô‚,Ë99=ÇÊRPHÛÛÛÌ¥:gÞ+†ù�ׯ“%);›;dI‚AÑo-¥Mei*+²Rk– &6½ËîºZ…÷ªG®Ï! !¨H³XÎБ¬Gï…WcŒÁIS·"� mUÒØ¾­ÀGììPU eµ¤n¼è+A’ŠÝ¹ˆývÖN%[µŠVµ´J¸2ζXÝ@@¼ÕeE]V óB( ÎõŸ3‹¥M¬"ƒ¯VÒÞS1Ê˺5J ¿)Šxãõ7xüô)I’1Þ¡¼¦H b“°œ¯Øœ úû`½ú× t¤ûû2+ ÎNNÈ·vðºT¤ö\œ�³µ±)ÀŸPÕš�lá=wïÞ¥( Æã�ïɕ໠úØG@9Ú¦áb:åáƒÇœO/©k‘š‰¢ˆËق㯼ƃû�ø‹ñ/R–%¯ýþW899a:�ÇBjšÍ—ü�¿ñI>ýé¿÷GžË|· ôÇ|¦Ó)Ÿüä§xçá²Éˆb�c"ÝgMÙ ckg‡ÅR6çÓÓS¶¶7XL–XW¶ß`AÚ‡y6`oï€86Ìg4¶f:›1ž 9»¼ÀkÏÞµ}tI{­¬Y•¢²Ðz�²ðþmÛ ±L9Ùpäºm=µmyüäóù‚ý½ŒébI–L¢º¬¢˜óéŒ7ŽxûÁCšF¶—g$Y†‰S^ÿæ·ØÜœPUç§b¦3–Ë%[[›$ÑÕµNdy”CàÕ Lm6Ú(MÈ“ŒÄÈ ÝñÖeH:¤Òº5Ã:Ùó*‹8l‡@ÖJPFÖ�pNÀUu¨<ä1Ý0Ú9+™zûí@�wƒàÛy<=lVš*áQˆ¢~®u×é·ÉïÂ#»ç0Qhw‰$¿BájPœ2£¾õꕦjZLl9»¸�õy¹d>[†Ç†ƒ1{{{�ç9³Ù%Î9ö÷÷iÛ†í�MPžÈ¬:Jdö0,dÓ(W¥\"=xÈéé9ýèGyõ×ÔÌf3ÝD]×ÌgKž>9fo÷€áæ�Á ÀÕÃÖ‹¢ žÏiÓó”„Ì*³¯Ä$�¤\¿~�<�mÛÖŠrYi#’8bÑŠ(ijŒØ¾øÀõj¯‚ÜU{S÷ ’޳®+¨Ð8åÉ2x¥°�ø3ÙF ›&ÀÌ[©Ž”ö˜(\×à}‹k…·Õ¶‚4‹b�Y7¶¢®%¢T¿F]+^9„u猨RD]KÖˆ�ˆÅr¹¢ó)òV’ÔÉhÜ+ ,— ²,£H‡‚�-œuâódbž==fµ²<|øˆe¹ÉÆÖÃᘪø7kíŸb�®`ŒÆ5-q,3ÎÊÖèH4‹"Çx¨ËE–±½¹ÉôrNUU,g ¾sŸ?ý§þ£ Sòøìü=ï»ß5ýê¯þ*Ïž>Æ-›aœ°ªF£ E>`ww—ª´,V%óûø�ßø >ú±�pç}/òÃúOÉÜÇk–KAÈüæoüŸü×ý¯ó‹Ÿþ4ûûûïù ®ïBÀKðyòä ŸüÔ§˜Ídƒû{;dYŒkÒ,gËD<~zJc³%Y–iöCÒ(%6'ÇRMDJdLnܸ�³RR?>yF^/¡.ÅæùääLP3jÉù0ŒÆ£ÓX]§gÖm†ñΡ�yOn ù|NÓXâ,ÅÅd2¢i*ʲ¡i*)¡wwùæ7_Ç9Çx<¦ª*†Ã!ÏžszzÊîî.çç真]rýè&ËeÉÛoß'Š"öwwÄú¹�‰¼Ç¡ #´†4ͱME[·híæCy&­¾¦¡²-um{Ù}Éx;Knq`²aŽuÅ¥ñ j+W‡®kq,më†ÆU=:Jë«€-U–Ýi­ñÎÓ:©œœCÑÊ ‘›X©NßL‚¼È©„öŽtΡ#™®LïƒH¦ ™°”ƒ‚2L£~P®£Hž«†™{¤qB«, C’H“%ž».ç”±akw‹ƒý÷ °e8@µ–ãÇ� ZïŽG¸Ö†ÞýŒA–‚IzåmÛ´Ó4~ikÏÇÇ|ík_ãäøLT»�½Ýkh­¹ÿè!‹ių§çœŸMn ØÚÚ ®›ÀC±ŒCis)¨!‘j�8ÝÖMø”–Ë9mcd¹lì^¸-Qª…¤ë!‰Ä¿¨q`☦­¿mž'—护jL'ó®–àiÝU’¡IP÷<"k[leik­|�vôÐ'§(åñ­¥EÚ”I±tïL9®f�á>nš6¼·˜$‰† ™oÙ–ù|.¼¦¶ÅVµÙnL¤*-¥}�e›pŠ‹‹9«ù’Ö‹ìO‹c0�}éìü’£ë¥lÒ„½í=Œ±¡õ(ë¾ë¤H….×È6�$“‘¨ºh‹À{˜þd"çûì쬗{úô˜7¾%DÖñxL’oñìòñ{Ú{¿ë hk÷�W?ø*‡G×ù��œW?ò*?ùŸüǼüÊûùèÇþ$×®Ý"ˇìï_ãÁÃû|Bšy¯òνwØÞÜf>›ƒs òBxLNPEu%pkáÉFà�ÖCãäŒâm"+„ÊrY2Þ˜`ë–élÆÎö.óùœ£ƒC.ÎÎQBPU…øÇ¼ƒ<Ë$6‘Ï[[²4h'©ê€Dʳœ"͈ÄÂí=±6äiBEÐ64å’A.Ê#il¸8?!6°³=ao{ƒaž�Æš8RDÊ“ñÚ )ÒŒD+Úº&‹cð"$,ó'3­ê£ &Ž™MçÌsV«Šªj¸œÎY­j¦³³YÉbQñàþf³’8ÉYÌW¤IÆ¿ýÊ—¹}ëƒ"#ËŒ–nSU8×Eš,�I“8ÌQÄÊå°MÕ«�x×âÚ†á`ˆ÷Ž$‰(Šå®mˆo‚‰eXŽ÷ا2ªh”­‚Ä‘TàI ‘»iˆ"MäùÉO’çù÷4>ö±�ñÙÏ~¶ÿþ�r¬V+~ñ‘ßþíßæC¯¾Ê`0äøô„ÄÁ©òÁ€ÍÑ&q"Ã@ñ?‘>t Œ·.Œ‚£k×°¶e¹˜‘g®íí³(ìíìp1»`iÞ¶LFc6ÆŠ<çlvŽŠ#4y• GUê+L˜µ˜€¶é¾$1ư³³Ãh<èÛ×ö°Ö²³»‰ó Åp(úUרÞÞI%²ûûûL&bqp휞žÇ)E1 šÅ¹«¹Šö¢¿¦½P——3ñ4ò’QÆqŒÑ)UUqqqÁã§ÏH²œÙlÁd2a0¡”x=zôˆÓÓs²¬`2Þ¦\Õ¼}ï¾T GSlݰœ/8;9ew�H’,G�G"ÿßéQ½[‘ÀȺ· ¯}§¥ZËæÈŒ­•¹ÞÁÁƒ�œK¯G‡7Ð:b:•¹Ý“'O™Í.¹yófxAÀ¥iJžf2Äv–ÕR˜øi–©CûQ9 åïû mé8;>!‰b.//9¸vÄÁÁ÷>Fki”eÅålЉc0ߎ&ýnÇw @ÿäŸü”R ‡CÊrÉõ3ÿ%_ÿú×9~|Îb1c9]¡¢˜Ë3G^ÞÿÊ-ŽnòÕßÿ2FC¹œq9[ò¾^a:ŸS— ¶²ÔUËŸÿOÿ _ø7¿ÍOýÔOñ·ÿößæÇ~ìÇÞóîŽï§êùÍßüMþîßý»lmnòÃ?ôC$IÊrµ 2šÖ:æ³%�—ŠdÐ O†¡wÒZ°WL²D\¿~�íÍ^{í¸wïŒ1¼ò>m}òæ¬V‹>Û=Ø—€1š ©}ÍtµÀ¹«*„!¸—Aªµ¶7¡ƒ+L­ÅOe0È1Fõ„ØÍÍI¿ÁEFŒQìîn-§ˆñxˆRò³ÍÍM–Ë%·nÝ ÏsNNž1™LFÒfiDŠFIà·�P§@¡E¯L{!Î- iMöwžçPE˜¦MÝÇ)Y¦ðÆ‘ ŠQŽ7-In˜Î¦@KíJvv0‰ÁÄepÓõCµ5Z£ñTµh²ùÐ2¶A|S'2D 4u-™w–álËb±ÀYKӊȪJ¢o @]ÂÑÁŠ×ç?@¿i‡Ã¾Ý³X\€éÇA,Ô{�^Èøîz™+ƒ.è½[Ôv�öÜ=Œ€†nÝ~�—^z‰¦µ¼þú×xçÁ}Ù?‚2|ᤪ+¡íž§ÿ4 aU{¤¨>øþ÷sy1#IvvöÐ(ªª¡®Jb"ž=<&6WÖä…ì …"qyrA½¨ØÞÜÆ¨í5éVÊ ²˜.øò—ÿ-ûØÇ˜Î¼þÍo…$3aooŸãÓSòlÀ¼\%9“É{Ÿó×Ô1‹µÖŒF./.xùÅyó¿Ešìì1Ÿ [Ö(dzgOY•üÐ'þ$ÿöË¿Ëb^™ŒÿãWU4˜0Hö¸˜ãZ˜NkþÎßùyþþßÿŸùÔ§>É�üÈ�|[öðÇuxïùÜç>Ç/ýÒ/1›ÍxåÅ÷qíàZ/-^7u¯sd­e6Ÿ±jj.gSvv¶ØÝÜè7…8ŽéÆ�]Tä9Û;›ÄÆ`m€Uµåø¡ü8mkÙp¶e2°(\^^°\.éŒÞ” 9Õ3[®¬ºÙDÛJ¿[ª"%󠦢i®6­é9‚Ö±äyާÅZ0‘ dGã�xÞÔ+Æ£Í�åN sኴ2�\¿Ém€Y÷šgAÑ¡Óâê²QëZ”ÑÜ:¼ÅÆÆ·oßfww·€–eIUUܾ}›ííí^aww—ÃÃCêºæøø˜[·ná½gccƒ²,yöì™l±y]¹®Ñ +¥dóúm}~)Íb!ƒÞÙlHU´\.Y­*Þºw�½�]l8‡ÛÛÛœžžR–K6Çööödsr åR¼�ò<§®5Mkƒãí:ßè Š®”"M’ç\]&oŒ‘ª§¹âº$I‚÷"™Ó�;ÎÎÎz$^‡hê6Iñú¡W0�ëÔí®ˆ<ÏØÝÝa±X’ēɄ(JúÏTÛR`|ÚQ Dˆr4*d–æ5ÖÒ'OïæyR¯Pპ^ GiÒ;µæEA‘çŒCf—S...pÖ¢“˜•m0šç‚ózµ»^y¬WÀ‚ø+$Iù ]Õ$Ö„reA¡C»²»÷ßý·ë¨Íõ£WÜh�´­ó ¯ÄÜòéÓ§¬ª’<ÏúôÄY*�ƒ$&M¡[˜è*ñ4�xª5xPtM£MÙ¸½AEA„µa2™PäCÊjɵb—f¾BÕ;fǨXqt°Ï`0à÷ÿ7¨Ë–�шùt΋/¾Èx0á¥÷½ŸÓ“3.gsšà ³é”ª®‰“Œ�­Þ|óE‘2mR ß;ïó» �Ñ0Xæ^róæ!mÛòá}ˆ¯}õuÆã Ř/}é÷xôèÎíp~n©›%ðÚWˆbM É­\Y)íÛŒk{lŽ'8縸˜²X44V3}óþÎ÷óyÎOÿôÁOþäO²³³óž?ÄvœœœðÏÿù?ç×~í×(Ë’£k|äO¼JSµ_¤OlôÕæäµ¢ª-‹å ïqœR®‚uo,§¬k$¡"è|€Þ|ã5NÏŽ¹yëˆÛ·îД5(Ïj9j˜2d G9‹å…lNiLÛTh�)–Ä#‘”ÑZ‘e Ql‚€¤§µ�{á…aŒ%¶ÝÚÈ åišJ”kµhÀʼn­8ïH¢)ò<¥m›ðšUY±°K婦zÖ´Gä_šÀÜ6JäP\ëYgV1;Xy’g2�pβ»»M‹{¥lÐ5׮퇶ܠ�¼qóˆñxÌÓ'ÇÄq,D`åŽÇ\ÎgLSvØ!61M�êqJ�rÎ9œµ‚ÈÓï¤ÂY‡]¯C­½÷œ^œóöÛosëÖ­~8üÕ¯-TŠLçs^zé%.¦—䃌íÝ-Þº÷&Q1™L¸ûÎ]‰ã˜åbNÇÒJÂQjB¿)‡×uêjCMÒ´píÔº÷kŒa2™ô?ëk­@ögj]dUt 3Q*(Wd¹°ïµ±XÛÔ€&J@Ã?ø~ʲFªhWË9ªUÍÆö���-òaŒŽUSá‘!¿t]œø?9�ó-¾Cl‚Xx1:lš†xM¯ÍZˬž±Z­ˆŒÁ�Q"t«ÂÚ[ƒè›ê„¾jñu0ãîû®2õ¶íg‚=ù i…J«UZeÒET=½@U�.¸?ñæªÂz·�Gwz[›yɽ·ßæÑãÇÌf3–+1ÅËóœårI ñ\8~†$KP‘A{!*£®›‘Uh�á5šFä�¬ÅÖ5i³µ1Á{Ïñ“36Ž®s~~ΰ(HLÂl9£(2”�øêk_g2Übg{o7¯ß¯ÆÄ&æãû˲æ÷¾ü%¶wö(FcÎÎ.ˆÒ §tPkˆ0Q‚󊺹RÔÿwß5ýÄOüÖZ>÷¹ÏiÍÅ鯾ú*?õ—þ3«Š4ŠÙÜò/û7ÙØ1¤”ÍŠñ0cgOx0qÊçþå¿ÆzGì6ùâïÍñÞSi’±½µ6NÑOŠ’œöÏ~�øÿ!wîÜá‡ø‡ùÁüA^yå•÷Ì!ªªŠo|ã|á _àsŸÿ<<`ccƒí­MFÅ€Ñx$¤¯$ ½ÆSŠNS§g™~£ØØØ`0$z�DI€†v_�EöÅÅàØÜœ°»·ÍùÉ)£Ñ¥=MSãÛTŒòŽ86,«%.˜£i'�¯KR‰éSd4Y‘b¢�õ-¯ØûàimK’IR”mZûœ'‘ðŠ´ Üjn1Ú¶ :wk¶·whyÎÄuØpEú�ÕƒõÂ…X¿ù”Rä!#ªªŠÁ`üã%ƒ×Z³¿¿OÓØþ&OÓ”ÉdÒCÚ_xáÆ“!­—j¡ªkƒÃñˆØD4­…&x¼8ßgŒ�Yò `ôÕÝmÝû|ã�7ðÞ3ˆ¸æ|>çøø˜��ÎÏOO†8åxûí»ìïï÷’7‡‡‡Äiƒï°½½Í`0À‰™îüÄYÚ·‹ºŠ§óUÉ⤯hŒ1øÀié‚Mwu¥¬°® ÑYdÁ'ª»]»¨,KšÎ~> IDAT`çÓÎãj“–êÙ“¤ƒaË¥¥¬¨Hsû…#ž<~ÆÑÑ!Û[ ,q¢‰"�Ö^Ú²Á™SPšWfi* 8{bq)9)$Â<%ÖÂAòÎ NI]4òMž‹b„[«ºÃ¦¿žTtkf=ÙÐZÓ6Mϳžkgw× Öô×[ár›u&éß±ÚY×\‡öwˆ¥*™.æDKIÌtP€HÓçö ¡‚7&˜êž¤»t‰4km˜…v|‘Q–%§ÇOH’Œ,I˜ž_ [ÏÎæÙ `{s›�½]Кý;Ÿçý1Ùe˜¹œNd#ÞºwŸålI”Fœ\^ðôôœ�-Íüþ#NO/¸ó¾;$MÃéÙþð‡ŽGÁ:^Ëï¸?¿ûø®¨d ~à£æ}ï{ÇÇϸ<;eX,s–‹7¯_c4Ìä1¶)yéŸÿÎ=p|Þó‰O|”{o¿�¶Lç3ƒ‚ñdÈh4£yúô1§§§¼øâm¶¶7 ^~ÿĶSþÕ¿úþÙ?ý§œž�1™Œ9:ºÎîî.EQô|¢étÊt:ãøø˜ˆ†Qš³*kF£þèÇ9«ùMØôŒÆµ­°�µÀ,ó,css“'Ož‘¤BÀ´Þ1©ª e-‘³~�,ü&´ðºžþÎÎÇÇǬV ?~(²mŒ­*Ò$bµ*Á7ÄÚ3(2ꦤÑPׂޑŒ+c„ùœÆh#ðIpxßJÖiºÞ³ü¼ƒ;×)´=IÖùm4MSc"�‹ CLU¯Ð:’ JÛÝ ž²Z ¶µ´ÎcðBÈ}¡£®: A—á;)ÑÜòÎaK+è¬$émŒQÞµ5aµZ�erm»ja0ÌŽÇ =ù £©kòAF–ND)Â;¬éúÖK®ŒÆh�Ž4¸H²gÛ¢#¹yÝz«Ëµ4aè{çΣÓ锓³†ã!û×öyüø øà¥]hT¤xvúŒ´H‰³˜‡O²±µIœ& i.` ¸0Ó¨ëJ¤ˆðD抔‹Ñ¢Sæ|/¯ß«ç*šXø0mP—0qDâS¼‚8M†ßÚÞ¦ÀÄ6hïuYº2W„CçÃà<2ÔUÃlvÉx<–`ŽT,MÓ�ç9×og1;;;|bHR-•scŨ1¸˜”*ÄœV£ ù4ÈÉ„ÖQä â("ŽÊyÒ¼¤k�WebLœà«:´f›>Pw£k­sÉÖ[ÅÝœ6!À¡[ûmA¢Ñí¥D t��e)š«vÝúŒé;Í|ºïûu<àÕke4e¹°ƒ÷"‰¥Öì<Œ(qøpc�; %®ek¢V³Z-‚¬O�÷-årN½\pppÈõ‡lOvÀ)â4Á)Øßßg{g‡8Ëù±ÿó\»vÄ­[·©Ê†'_úOž>-@“ðìì¯4«Òò�o~‹Ýý=†£ —S@íî±½³ËÁÁ³é{ >ð‡µà66¸{÷.OŸ>ecc‚Fñå/}‰$I¸yó&:•ìc2°¹1f:½äÞ[w1‘âÞ[wÙÚÚd2±4K®ðÖ7O9:ÜçŸøÃѯyžñÆ[oòæ›oðâ‹/�¦1årÎ|~N^ä¼¼}›¶n(�ˆ^\ÎøÝ/þ?´­âüüRHU:!NÄ«Ýyh[MTÖhå›(´)V¸¶EtFggÛ–�ú`oŒ¡( ¼wÕU m_Ax­“B’VÓÞ·ÄiBÓXVõŠ,ËØÙÙ$M#.ÎNH’ŸÉºlê ¥®Ú›¨+nŽR"¥£µ¦tWb¯MÓ B’ԡд‡¢((²\ÐY�X<�H²ŒEµêÿ~ýów›ö»-¹µÖ}•Ø%a­º ëÁÇëç=�œ^'°õŽ´P}uß­�îßî\vï¯{_]«´iÃ1³ÙŒ²î]‡²Äèp/‡{J!Éq»FÈ6ºW€ï*TéÐ_!ïºóP­‚¦^ëÐqÌr9§,K>øò«xoXU^ÁhcçÿåîÍž-Iîû¾OfÖrêlwë}�î,$%) " !2‚z׃mÉz°$ù_�äZ~�õX!<˜ ûÑá+‚¡°h˲eC$@˜™ž™ôz׳֞é‡_f�:çÞ›!J&”7ú.uª2³ª~ë÷÷ýñêô¥\¿}—¼r<uJYÖܼ}Ÿ—¯Ÿƒk78ËÏP‘ÀåÿìŸù"ßüæ7ùàý¹w_BäƒA‹/¨ªŠñxŒŠ ëõÛy?ðê€îܺËéÉ ?üÁfCŽ��QQÊÑ4E¹âµGűîк5MZ[3gܼy�¯üÂ/2žyðð.­­dB?3ÈR�öXçKË ÆãŒAQ•9qbxöüÇh­ˆ£˜Ó³²Ñˆ²®P:&/¥¸±qJZ ؆,K(ŠœñH@7n^'”Óɤ+„|çá#©Dö×DÓ½=öö¦¤YÊx2eµ^óüÅ Æ“Ó)ãÑDª¥mKUVŒÇ–žRg”�(Êœõj%Y[3¤ Ò”86(e)òµ‡¨jbís5qÂb½ü¾yA¡|Ûʦn)ò‚¦­hÛMø&$a¥'Ê�Ó!®”" .½AAõ_Ü œC�EY–´Và»îÒ$’B>þ ¼*RJ‘¥ MÛ�$±ôyqx‹_èhš¦õÊ»òu$q·ÖÖ #°uËSúœl,Ð ¬�QÝË,ï«ì·AàN±µV뽺½ýý.ôÒ¶-“É„½½=¬‡ð. ²lÀí[·¤Hp:‘"í¶Öi�NêB/u³±ÎÛ†(–š• D�³›�O#t ¦bçuWçÕtßw\y^¸•U%ý^”PÍÔuM^H÷ËÐú¡õÕõq"It¥}Í#éâ4¦ªE'žpCœøÚÄË®ª�€WŒDhÿv’cl ðÊN!ûœŽFà‹‚¥üZ<õ¦j¨ªšÅrÅb¹ò}‚*¤O�c¹Z3_,©)œ FT€¡+¥¶¸�îYìÀ­´‘6!‰°‹˜ˆ®'”ÖÔµ;/ 5bÚK´u®ã%ìîÃs´Z­ºw­ªªî Çæ¹h!̯cÓµ7ɲŒº•¶ ]Ɉ—ã¼×¥<‚3xf±/ÿhëš<ÏI"±ëœ,ËXÎçݼ@±Xì^ÇiM’e¬ò‚Ó‹9­Ó¨(ÆQYG‹·gã1ËuA^ÕÝ34ÙÛãöÝÛ¼ÿáÌ3”1œ]œqzvÊÞþuSóÙÏ~–ï~÷» ’ìß­ÈÃÙÙeYR×57oÞäåË—äùн½Ù0a±¨99yMYæä¹,<Žcöö'þ%Íx<$$ܽ}ƒ¶­ØÛŸðÍo~“»÷îQÛ–ïÿûœ��rûömV‹ nݺAkÎÏO9º~À|>çøä”g/^�¤CêÆ‘f{Àr]Ó6–8‘&gQ”ò¹Ï<æÎÝ›ìï3ÊbÖ«5mÓ0H$“”ÕjÅñë×’(žŒùøã�¹ÿð!g'¡VT%hÅíÛ7ŽÄò�ÑX[Ç) JiÒDªý_¼xÅp8`:Ýg:�J=„–ªîº± ’«\gkñ ¡�²¾UGà’Ò6Âa}›ê ¨Ÿ í'eû‚7ŒÎªî)ž~ÿ›pž>,8|NÎí¢V—¯å\§È‚BÚMö‡®¥ýëõ‘G*ä¼~ÒP’tíèCvbð»qù¾…ª¼R·iá‡Ìg›†'µð³kmפÍÓ¡¸Â5[o™¶¨íë»Í5ÂÁ"{˜.ŒXÖu¥ÕÛߎÞ=xSýÉÖ½Ò¢à\í‘›V(Z” ˆ@�º‹ÚE@àYœEûö˜àÅT8g©‚àæ<[D0¤òÕªëJ+ûìsZ~ßÒ4•\QY1ŸÏ) ixf­ï «­µîîOߛ݅Iƒ/cð†ZIˆP Ø {î•ì‹“öö8Œ“6#³õ¼öCx€o‰.¬àUUm=çJ)&Ó}Ú¶¥,KxD™§#’0¹ÒÛÞ›Ž¶# uÝàzïUt„÷¨(…¸·®*ôJ“—…Ø:¢¬ŽÏÎ9_,Ø?8 h¬€DLD^7¸Æ™X:À¶�7\:‰H†CÙ—j#C†Ã¡„þ"ÍtzÀѵ}nÞºÎh”qv~²ÅËøG�7* 8Ž9>>î ¯Ïž=çÑ£wøä“O˜L3)ËÕœ_þê/òüÙKß5°¤(*âUAÃÈ ;A÷õ¯�o~ó›uÅ¿úWÿ·0ŒÇÌ–Â7öɧO¥�I#±u£øþþ>”dm–aâÔÃ"⊎hY±˜-Y.ÖL¦Sîݽţ‡f1£ñ�"žDŒ‡C‹… Ú"é8:JmÏ�~ô#ÆÓ)/_¾ºŒHñüÅ ÒaFœ(Ë’TG¬×%™GñDyƒQE^3dìíí£UKãÿÎ9"“éˆùüë+ÑE Xâ2Åx’pc ±ó€»ñ,\kqø»êÕ‘�xÑìv#7¼e*'\ÅM£0¾g�’‡iø&/XàÑ’Zûó¶®Ëùtóè)Bç¤ù^ø ù,çÃ![ÉÙ¶&pu‰P × òðÕ u(%!7­;ª¢Íš7Z^Ü @=ÞÉ Ø:¿.ï-˜éuÖ'H19ïFé ô^XŒ/¶TZ£‚ó…ÃÎúuøy(þ±¶Åi‡î…D7Þ(œÐR=%]®ªçê�‡S›Š{ÌÆCí«æÎp­ç2SXµ1” ž(Ý}”Ïé®…´v�%Òà<·Ÿµ"›nKa*·áù©Qmƒ¶r¾µÝ4ÔZéM3?k-±WÎ¥ª„È6(×^¸©ré?{�WÛ{.‚b_åë ¸#2¢ø}ÝO‹#ñ!÷Ž‘Ûø{+úÖ5ú†J_éIÍX¹eÈ%"ÝWÓbL„õœÐ> €Fk�i{ H ·¡1¦Cë:߆¢©¥ÇOS×H”SÓ¶%¤ƒ!‘Ày}zƳW¯‰²!ë²Â:Eš ÉË¥#šf�”røVìÁ€¶Òÿ+Ë”ë5£Ñˆ{÷î1™fEÎѵ=Æã!ó‹ É„ºÈy÷Ñ}fgo×’û'Ö���¡”âåË—\»v�Ï~ö³üø™½}ôÑG|òô#=zÄÅÅ7oÞÁYÅóçÏ™ÏWL&Cê¤áü|FYæüÓúO9¸vÄëׯiÛ–ë7nò¯¾ùÿrtt�(NI’”ù|Ááá!/_œ'†Å|Íóg¯8¸v�42ÈÆ´­£µ5Î#ÃÔdƒÓ|ù‹_âñ£‡L†#^½|Î(ͰM&Âè˜ùlÍpˆ@I}~¢®Z)€�Y,fTUÅÑ­ܾ}+Ë%UUÐÄËåš8Ê(Ê5£lL]· K.PN�ZÉ �¦†¼\3_-©›RêTK`�®[éxk©ÔO’ØZ…¢Å9í›tIXFøðåiùI€m+ï%(PBj‰r8OØÙWRaì"y‚Àê‡ôŒ1DJI1àîçz/T’$›6ÐìXð­µéTþ.óÞ\×÷ƹÁ6̸$„z+ÙúœÓ’gØÍìz€ýÄq-gŒºüžÅÜyKv³¿Ö[Ï[†M8¶™¹»=ï�[¾væ®6ëÛõt®J|ïzªNKÛqÜú-–ª'òܽ/H©uâ)§‰´B™Ä+f©%ꘙuŒEØ1‚rpÎuí3œÙæ÷Û]C`ÏÈ2ii¯] k-:Úþ\ðCÎ2„áú¹›°µm±uƒiimâáÍ¡\r>8 §Åtγy7Âuúpxk-yžwJ/„úÃ|‹ò„4M™L&¤iJÈ[…5Åñ¦]�„‰Ù° µT�m»p Æøð`ƒmZª²¡*p%Z×TMKã"ž<ý¢˜u^R·–d�1›KÎsí�Á›Í²TŠwµ&Ž¥ÕLSK˃Ã=®];àøäic]Ëd2FkÇ|qN¤ß¨V.�7¹Z/@Y&“ '''œ]\°ÊW¼÷™wÀ4¼>y…Òš>ü�[·îqzvÁ�Û0Ñ€åªäú�1&2œ�Ï(ªW�H³{ÓCnßnøôÇÏypÿ1ßùîïñÞç>‹‰Gd£„d0bµ®‰*‡SÖ…cþÑK9f4ó…/|�ïÿûâ*O&v°5ù¢­øüç?Ëò<§È¥ÁÕb¾BYÉáÔ‘X/?û3Ÿc8°˜ŸS”�@Óöy©ëAà§­E7�€Ó® ÝŸÄ—�º i¦PñÈ9m+t0x‡³Ûv¾Ç‰s¾Ç�À;¯Åm âMHa#”7!�hG@º-…£ýu‚,ìü/'€Òë4ìKú"Lº:uúžOh4F:9J:‹Qq(ÙÝR´Ahq¶•ïrçlÇÍg­(K*ïý,”RÐ «¶ÂçmÚM4çZ”PCˆÕl7žaØ„¾ ¸ïáaÙÏ µl+KcLg±ûˆb·vël—¡sþ_7÷°“ÚmÂjFAU°m¬ïÙxg¥ÅË p_A³!Ï޵¶aC µ¹Ÿ A‰Ú¶õF—#I²KÞIÿ«ni=Â`à´÷"$^iî Aõ…}ÿ9ëö×Ä8¥„¥Û6\_)FS• ýÓ§ƒ§ß½+5®ÂÊ(Ð?…üO˜{¨ËšL&DQÄ|¶”vëqIÅ(CW,M%Ͻ  AÐi¢$޼Á©pVˆS«¼¢.Eù%É€º^ ƒuÛ¢£˜²npV±Ê ¬Š˜¯ŸbLÌh<%Š“Îë�¢„i4èЩ±‰HÒˆ(�?xׯGu²,e2Ñ´{diÄruA'ùŠºªiÀÛõ{£�F<~ü˜Å|ÅÅÅŒ£k7I’„óósLdIÓ”£kà4Z'yKQTœ�Í(Ë‚Á`Ìd:`±'ÏK¬m˜·-Óé„ápÌz=çõëcË ¡7vNÆX§pF‹õlÁ‚/Ë’Æ¿ºò©ýˆÄcÒ®F{eÖ]È †“ ÍKêî-!‘ž@“g[md³�§†ÑW¢¸ ,U.î¶Ì4[o õú–®Ô-€ÓÛ!Â>P¡Ê×í+ í,XíÛQl vcñ›ÏïxQzÛë¹äéèËaÌîü·Ùöž{AdÕV]”Ú-0ñw3IâŽöG>· é É|¥õ¥ëKNEuÆI�W­µŸ;ØÜG¶ò[À¶W¼ãËy~;z/V˜qâ=½|ÿ¼ÂPÞ‹’ï6Éu´[ÞÌUnW8÷묵ú'µ=!<ç÷TS¸îFImò<á¸u�v“|óÞU†‚C¿oQ¾&B<‡`Yw±ñÂ|\ÝáÁ W(šÚŽêG]EÖY%µC#�0iEu9¶n=b�Ë@‰0¯íûÀ¥ûƒŸ÷UJ&ÜŸÝß_RB¾Ã«µPùZðeÆ·ƒj'³•k±V ¢Ã‡um¤˶4„Þ?HÎÉ5AžßªlºgV!ÝgûO’q­Å’„¼‰µÖ÷æÙ.'èŠ4½Rë…ƒ(šÝ|‘Óh o¸ïy&Žˆ½'Bk„µã;×n‡7/°úkEQÄ­[·xï½÷$ô–M8?9¥X­±uCžo<)ëù·@:l(†´ÖÔ¾q�„öýÛ6Ò¾#Žc–ÅÊ×ßh´Š˜ŒFÌg â8¦i,ÙxtÍ|¾@¿|IU6UMšd,ó5År¹$¦¼÷ø÷ïÝ–qg1‘a¶XàœãÅ‹g$©áü¤%ŠÅ›Ì‹×�®y�ICYVÀ”·oT@ǽ;w9~õšÃ£#Ò,ãøìD4ú0æãO>äÕ«c.ÎדðêåûÔ•åúõ›Ü¸qƒ/>eµž³¿7b~>çWõWùõ_ÿu¾üå/o »JF]×|ç;ßá·~ë·øíßþmâ,%ÆØUEÚ(ªÒrÖL¥µ´•bÐ4�1Fqïá}ÎÏÏ©ª5ÃABœ¥Äĉf˜&ä�XÐ afÝ!¦%Þ¬ Icp4n“ÄvBJ/±V£TðvZ$¬'?·´ˆ› }p”÷ŠÄzî Å œ9ÀYƒ•¹kíõëNúJC±- ËÙ¶ýú¤4I½±±�g!H^ñrN>dÓ·DpÔa}ÛB:äÀm 6–½uÙ�ÏúpXátða|•�ë<«Àô”¹@šï-m,cY¿„%›¦ÁªË(ª LwQ„ýáFéÍ»ÿ?§ÔÿrÎmCÏ�ê:q[M� –¼"6­#ÿ|Ic¶.äj¥ve×›’‰l@$Îy4š²(§¨ËZŠ©1(í¼¢OWyײÌ1&&Ž Q”ж5Mã•„m»ç°Ÿ÷ ÏQ@)j­· é!°*òžçd1ÐyµJI«í Ö�γ¿£5Sv¯/ü<ç\Є|Jc¡nÉË%‡LÆcÆ£&ŠX®×¾ŽM@ eQ#ý©”/8n;¥+ �¨CØ xDER¨ž’&NOÏ)Ëg¡©‹ÅŠ8N©[Ç*—ȼn©òœ¶•(ÖÝëG$Fê>_¾zŽA1ÉL2 ™®Ë‚¦rž±Až›étЦFGÙTã˜/Ï}�^Â4›rúŠ·o¬úòŽÆ6ŒGc†ã ¢Dsãæ5>yú)gçç¤É˜Õ:g4ÞçððßyÈÏý™ŸãÃ'0›Íˆ°ü¹/~‰øÿ!ù/ÿeióûÿ“Çó“†1†»wïòõ¯�_ÿõ_ç“�?áéGO)Û˜º5X ³ùŠ—/^²\Íi›Š45”eÎg>ÿâ,åõé1ƒÑˆáÞ„“ó¤‹bà ‹©*)´N Öƒ4eÿð�ýýCÒt Q’Ò¶–º¬¤͵ԶKH‹7#µ®õ¡ŒZ©ÆÏÑJm­´}¦åã?„38/ü¤á— ×¶õ‚Ðu/9A"-¤›¶íx²Œµn~v�8"­¥­2–~·06¡0Fû–çÒt/x3J#°0í|ExÛå:´Q¾s­ÿ¬‘ÚmäºAIÛA«%�FòJZ!� àðI`¥ð�W_°i;kÙ9ù¹µ€zâaI«uŠÖ9+9´%‰ F)¡…q–,M‰|›¦©åÌ*|I?�¯ˆ�0�ök Ñ‘6"ÔÙ8 ¡Þ̃‰ M+¼‡á™7ÆkME ³�<8”³~  a[éuòbÚ¿oçè÷ '­ Ú¶FÈIýžX‹AELj´„–êÆˆ·cŒòŸ-G§0FÃaWà<²P+e½àüó¤"Cd �³4uCmÙ`„d² ‰5i‘ˆ”"Ö†£é>©ŽQ­ÃÕ-ªµ(Z™sdh[G]·8q’b¢�—,Ñ�v£ ƒ8Á8¸89£^åNöH¢„ñpÂÿð‡Ô�ôjœ¥¶–‹ùEmMÙ4´Îá”–N¨EÁl±`YÔM‹Ó™ŽDÙÙ!–mÄ1‹Ù’Ùùœ¢ji­a½’Ò‘rµdo4âpÌ_ø…/ó+¿üùù/ýYòåŒXµØjÍ_ü…/ó+_ýeö&fg3ŒÖdƒ!ëå e4‹Å‚ýƒ Y–°\Ï8»8FE–Éd@”ꦤ¨ a')Ó·: ãׯiZé9�N‰ŠŽÚ'ô¶VèØ0ístpÈW¾ò‹”EåÝÅ5±jø�ßø ~é—~émõÀŸŠqçÎþ»ðø—ÿò_ò÷þÞÍë×'T�czxHQåíO™Œ2ž|A“‰Ø IDATøCîÞ½ËÇ÷yurÌr½¢´ •«)òå´­À�0j£¶m˺,:ë)�…¾e>ŸS{Fá8Ž¥b�å*%Åqòº‡ø¶„K\ÐçZúò(#^�õÍ›-X%ðãà]íXÐÁ²ì{2»ñü«òG»Ç…ÜÍV¬\ ·]ëÚK×ì�~Ü~k( «)e$ü¦Å¤ß …t‡«íë÷CF!4·åI8×…ƒÞ4‚5müg=�ÿ›ü�†ÝÐ¥´¶Â¹í½ k WíG—‹ÐæRø°¿ö®Ž_‡A�u­R�ìÚ D—£óaŸPã¡(cPF¼™8’±ÑÉf/µ�Û†ï�sT­(6Ç6Yh(®4�×´ñzä8�80;„P°§µ eYn…Þœs]ñqák†$åä=Ñ�­@ƃÇ0Jº•¦iBšd¬×9Y:Æiai]Ã$PÛ’åºðk�ü{·1ÖÂ9 '´®F3ˆbª¼àå³çüüíTyÅd4f] -“ mC´ôÿjZ×yšMnQ”‘“Ú*ÛJX°Qø}tºHÂÑäˆ8P”-Z9êuÊÍëܸqƒwßyÈ�Û·™N'\›ŒimÍÅ|Éh4"‹#Š8¢® )K‰cŒÑ¬ÎW8Jâ8ê˜"nݺEœHw[k[êÆw¿ýc$�Þ¨€Š¼¢¬e3¢²$¦ £„ÈÂÁhB>Ý—&OIÂíë7I•BÃÇŸ|¶æßø�=zë‰üi_ûÚ×øÆ7þ1ûoÿWœæµÔQ¬Wäß»Ms÷Ÿÿüg œŸHžu ãáˆÄ(ꢢi,q*ô<ƒÁå)Sº3tpLB;‘Á*h|Uå½ß„Çó�‰Û²IÌöCLý€õ–ß;¹Jì*—þï¯úy7w¤¶¼,Ùs‰þdGà÷c軣›—ÿˆ n�³Ðý-„/w‹b´$ ¶ÎU‚ùª0W? »pèí‚Akw!Ü‚V¼J¡÷£W)ÀÝD¸–ö®e7ðí^h1ìQ§è¼7$ϧOµ|3>Ч0/§U—_ õF»0~Éåùöð}ÞåÎ}³¬íßãþ~£ëªÜWØ£¼,¥uÒL²®k’DJBúçSvã�EJP]N+*ߢ$�5Zµ´u�mR“xo? „`…Ñš,‹)*C¾.%/¨{ ÞvƒŠ †Œ1Fª&”"N’Ž�üÅ‹|ï{ßó .ŽÉ0# (« ŒÁ55¶*%ç«„HØ5¾­J+†¥q [‘ÊY"“’˜ˆÑdÂì|Áþþ!7o Ù?¼EÛÀr•c4¼üô#F£wïÞåúõëÅÓþþ>ÆÆÓB`ï*¢¨nÞ¼É�›·QF³Z-XÌæg4MEšfÔg5uS5óùšƒƒ´JPÎÑTêÍŠeg¼ñ¸4J1&–V½yN�XÛ�& ïÜãÆÁuÆ¾Ëæþþ>mÛ°^Ìø½ßû]þñ7þ1÷îÝ{Ë)ü‡¿ù›¿Ér¹äoý­¿õ�{üø1ÿèý÷üý¯S£È ʵdiÂÏ鋤ـÓÓÊ2'Š5£ÑHx¸bƒq MbÀÖäë’$v7½®kœÚ0úÖuM’ P¾ž A¨SZî2Fq-—¹À¬ç;ñóoÖ¡” i°—Á»‚@Îi·„*°)¬|Ã×îqýsõÏÓŸÓU?÷sT�…í ;]σë_wWqí*í@õ؆·dO õÇn˜p÷œ›Ïö”�sݷϳ)î½j~}oèMûÐQ}¥d{`£¶kk4}º�[ Ÿ�s® ¡vž‹µV´–¶qXê^>ŒŽ#¿é^„u4Þ響ÿ¹>dºÏ8ι ž ó ¤Ñ|>ßÚ›þõµ6D¾YÖ щ÷jý1‘Xr@é)|í–I ¾pÛZëA ªSäà„oÒ9ÒXzDœµ–ï~çÛ †#lÝHçÜAJžæF±ÊiÉ ¶©©[ÉçhÛ2ÉÆ~>mj…21I< �Ôõ±‰8<<”VÚgÇÌçKáØŽ988âáÃGܸq‹2—Pf VQ¤à KËùÅ9U]S”krªj- ô\Ýu0N’Iäpí×;CY´Œ¼Õx£ 7=¸Íi£•fqÒaðëZ*žËÕŠÿãÿúüÆóª•ÏwÜ¿Ÿÿöïÿ}þÎßù»Ü~ô€½é˜£Ã=ö&œŸŸ£�ðK¾Îaì(Ëš¶6ðAQkó×ãD¨ñ‹’Å|ÞÜ…†T«"§ ‰èØtìÅ’bÐÐ\~±‚ë-äF¨)¥0þ«ðµ›š¢0ú‚p×#úI!©­ëkÕ¿��Œo{ÀeaÞ”]ȨG.Ù¯ãèÇžŠ(ä8´¿f'ð۞Рk ×ð×u2�K!·¾—ŽÛ�sÛ†½Ú¥ÄÙ^—p«E[ÂØ!E !a½u¼Ö[žPÿ>ôïKÛ3 À{0øÒ®aw;/ � ‹²Ùô]>o³’ï³;Ç»ªºâfe/+JkíÆpRW×{m­¡¼JùôïO(äª!coz�Éx@Yhšª¥*[ÖëŠõªdüðíÚç¼QÍçò ¦æ³ó‰^焨ª*.Ö+¾ö+¿ÂŸÿóþ­.üÓ4¾ò•¯ðõ¯ÿ ?üáð3ŸyGK[ Ò˜l4áß~ûÛ”µe¹\²\ç(O·sãp[µ4uËË—/�Çb±$I×þÙZK^•Þ²pèÈ�šíÛ TU%1e·Ýß$¼\E£<}¼ÚÐm„�rèû»ÊvmsLeݱ,w…ÄUŸçÿù]!γ õM}k¸ž~æMc+”¥· wÐUó ”<ý½Á»í¹˜�:9ÆSùô yúÂYÜvg·`³qÛœoÁÓì꩚mRÙÝZtìîs˜ÑEMP²’†#mêµmv<3èæßÿÚEüõs\»Ê7 ûèÌ](xQu h6›±^¯;6ú«úð)Ö :ó|5ÇøÖ+I’PäZi"c¤C’L:¯×kt1�Žy÷ÝG¼>9&DN©ê­SFÃ1GG7ùðƒ�I“Óé!M]‹ZUäyÉ£‡‡ox·Ç�ÒŽHKw¾a–�Ä›(Ë2²,í�Rë<çÿãÿÄÿðwÿÎ[]ô§qüÍ¿ù7ù«õ?çâô„ƒƒ J;FqÊñùŒ|½†X8ãʺ!6M�3Jb¥ÇÌÎO!2 ºD¡sÒE´,KÒ4¥ªëN ô_¤¦iHL‚Q’û‘b3)„—Û9×Åë½Î‘—ا~Ú¶Ý¢“ߎç».¡F_h­79†Pçc¶½„ÖWß÷!ÏVÉï-ޏ'<¯R>}HvHḶm=¼ÌÃÀ|H)%!•Ö3p9´†Èµ ø6{Ç@¡@Øâé„)*µ�çé_¢/ÐYm/D¼šn7OëïõUY?œeð,¡¾K±u.ᤠÅí† µÓ[MÌš°>ºÛÎа;÷&2¡ö<Ñ9ÏçaÿÊØ5žh¥EÀFzk=ýq•!²ë‰÷ŸÇÐz!ŽclÛR•¥´TÖzÅ Ù`DÛtûÚµkܼySÀOIØ|ôìÙ3f³9‹å’¼’õ—þÜX,—¼>~�Õ%óEAc⽿wÈ“ž‘kÇhx�Å|E]I¨®ÿÈHßyt_dYí8íá’†Â[íJ)¾óûßã«_ý*‡‡o§õ~Çáá!_ýêWù½oÿ??äèð€“³sþàûßc<QÔÞjm�ôÖ©eY£"Íx4"½qƒÑH@ÖZirIo˜áH¬#×Ô›—K ‚,ŽcXRÜ:Ú�Óš°Ú[Ž^®íÆÃ•½xþ¾á*Ûþ}È[õµ…m·Îß©Ú/ºRù…ßõCn�PíYÅF]^Sÿ\—Ðs;ë ç¿*Dµ‚ÜõŠD ›­ŸûŸWJuü^}Ïes}ëëŒ6aí~-Tß«ÛÝÛà©DQ¼¥Àûáª`¤H(­Jì+ ½ÙÉïøÜ¡ÞniÝZëÃ���TùVªcl–“zï³ÝX”Øå{±mðô¿ë¼êÞ„ù†ß5MÃb!–Q¡³Œ²,{×Ùwå)¼i *°Q ¤Ÿ˜ í;¤€³, ÎÎNËÁá˜á(¡mFÉÀG,:÷²Ï ™­Ò¶qÄqJ¤}×bOòj”–¢Ïõš$e‚õ]_=³ ÚÑ6 k)MQ(¿·ÅrÍÒZŒi±€d¿ ‘Š .Éõº@ë˜{wîrq¾äåËW˜Hq4<$_-}‘)ëõšl�{vÝ’¯Kœ©Æq̪È9>~ÍÅ|†ÒS7®ß¢,þõ¿þ·\¿vK:8Çï?a2Ý£ñ(¸-´Ó1Þ¨€f³sæ~Òq”2 Y¯WŒF#Ž��9::¢jʪäÅëcþÊúŸ½õEZÇ_úK¿Ê¿ù�oRU%«õ’<_¡”„!k8¼v�ÓÓ ¢(`]i+´nqþe],ìB32_,º¦bZK½O®(u�g ëõ”0lPD!>Ý�£¥µ+žw…xcÝñD‚ ˆµ´Üvfl[a÷ËÙú¼OïáS¾º<Ž ½ŒúŒ áÚa.ýV»ažŽê¦§°.…“z¬Ÿ[,¤”M»©š×F �[gom‹mêî::Ôi�m6½]$œ¦ºBȾм Ù¦ž+l[9ôÃ�»y‹þ9‚§'±TÍ×øûÜ󄬵Ò;©wÿ@Œ�ð}ã¤SmZõÏOS×Þ‹–sEI¼¹ÖQµ›vâ[ŠBïÖm)¢°6µóÈp_yö�ï“̆&�[ïCð<»)+â(º–²…”eYwŸ†ƒŒªV´mMì9Øldi¡ùËó’²°,gsNÏÎ8:ا.^/f\»vØQôh­¹vtÄËWÇctÂx¸G‘çŒGÊçùóܽ{÷O½Î¿�<›ãóg\7 {óæ FûG¼>›s¾Ì·Øyµmb°5uY¡”Ê€|K’„ÖJÛï¶m…6Þn=´“¼ŠõÞO±i¤:¶_N­5X°ª÷ró“…;lHèa}®«]á¼U„}8aïç]ðÃ.ª/¬w¿ï®û^ ikÿ¸Pd‹s8¥pJãB¾Ä9´Ú„Û¶í5øÓ‚ .· èBq>¤“k ïný0‘œs³áîÛ Ïí†!ûÞÚîzûûÖß3ü4jÓZïj1D‚GZ·Û¹¥a¹É%®Ù£TÒ¦CvwÚ¤ pC?__lÖy9ìÙ_ÏVKì+ê„ú­Ôå¾XÚ¦®•ä[7´N,v¢Ø“uJîs˜hۖ¶4uÍz] ”Á9EPÎðâù+ÎOO‰cCP ƒÄP—{ƒ‘Ï—lÝ2ÌFÌ—+f+ò<'ND饃e^ÐÖë<磧Ÿ2$¤iÆž1DIаíCkUUSU%“ÉpØž¥  ¯º�—éìö¾„gÅ&$×Ó‘|;�ä ½–$ óùœU¾¤¶-I<Ü´nð „PÄZ-4âõEÚ`[(óY6’�YcùôÇϱ-¬Ö9?úá¦ûX-^HœÛ’ ŽnÜdYæ¬êŠª±äEIY5DF@IZƒŽb°Ž‹‹9¯^½-`G]åA6žP–%«¢äb¹b¼·ÏÞÞEQðäÉ®a­åî�;“Áë×ÏyùâSʪáùñ+ªºå[ßú¾ûÝß'Ò³‹®ôâõ+oè@QW€e²7FÍr¹æìb‰µ–Ét„s#´Vh>X­ܸy�õªÀZéð¶ã� è£'?f²7ÅDÙ`L±*x÷ÑÌ�¼|ù’ÅÅŒG_xˆ&êzüQ47ÿ¾ÆÛ\w<¿ÏUãüü|RWkŸgКããcñª&{”yÁx”ǦviSVBj¸^¯NÆDqL”ĵ$°•é5âò1{£6 åàÍl ?¯à_tBÊ6ä‚v»¡’«ÐXâ5lòq‹@¯‘î¡=aÝ Æp^ås6í¶³;—ÝüÆ•Ör ®ö§wN2Î…ëˆUïØ ÃU”Û0@Ëþu(¡/ä·®Ý%ûC¡ìUÞ§xòYO«6!¶Ý5…u_uoúƃÖÚç¬loŽÛpìðì„ùn)­ÅCt üþ„=“WìÆ w�_iÓ¶—òyýyëÞ|åÚÍNtƒßA …sn=O~�ÁÀêÂ¥A�)ÿ<ö8ø’(¢n-MU£‰8ìíI”¦u E-H/¥#´�Rœm 2ÊUŽs-ׯ_çÑ£GìïO=ïÜ@¼HY& PïSV9ÊD¬ÖOdN‘¦(KnÞ¸J‘† GÂg•&/JŒ2ÄÚà"(ª†õbIQÖ4­£©*´.ŽÇB䤓k’fäyÎË×ÇDIÊ­;R˜[T ïøÓñ„û÷îP×%ƒAB]¬iÊ’ù|Æ«W/˜îðìÙ3~ðƒP—5ëUA R0J(¥I)QšPki=ƒÔKÍg &{{L§Sƒ­­©k�®¸Ò�n6[Rä-uué¿q¼¹#êdÈ­»wX.Öä…,èÉ“�9::bµZqûÎ-ö÷¦EÉÓ§OßþŠ?åã“O>A+EÓ8t4@kƒ‰†¬WÎ*@s~>“ÄwÛ²ÚŸkØ÷•ÐZkÚºŽ‘—)Ïs²‘T$ÛÖ‡¸Ú@eÒ££Ñ ÕJøD[–ú#æÛY õ厨»Çí†aúÊ.x¡�°S¢˜B_úîÜŽ­„xPŒÖ“¡v^PïÚÎI8Í)O¸É²K)lÛ ;Á+JGæ‹· ¥°.´Èö²åN9šª!J""u@�ÚÖÂî�£©j©‰ àççÜQõCd‚DrlB¨¬ß°l{“›�çŒyç~ô÷ß*KäÁ­j}³rÿw+|çÖw÷LÌ6Šn×k¬ªÚ£$w)a¶…ÃÏGÓTtR¯òb{!ck-uëQ“ÖIXÐ\®ßê�¾q~î¯!Ö±ä{”w†ÏƒŠ¤BU”Ôe%ÞmdN\´m˧Ÿ~Jš¦ìíí1uŽÅ*—Ž¡ª%K#qÂÑþˆj5àyøà.Ÿï=bóÙ9ûÓ±oB©8¸¶OÛ””�(ÆýýZ«8;¿`:Ý£ÊkšzÉt¼GÛ®ˆÍ€¶–ÚŸ¶q¬V%š˜ýé�¤X|òûÓ 7ïÜôlÜãÁLyY“—%ãÉ„8ÉȈÓó Ž®ßàæÍ[ž!f9ŸQßûÞ÷PÎ’¥‰D¯hùÚ/ÿÃñ„££#nÝ<â`rÄáá{‡ ŸùÌç(¼\ÊË‚oY ¥ IDAT}ç[ü›o}‹Ùâ‚ÑhDYÖ\?:âÖõ£X®fÔué‹àÏ~üŠÓÓ šZÓÖïÜ¿qéºj¼Qݾƒ½ƒ1×oÜàüâ­^œÓÅh8ä|~Ž2ðøÑþŸßùMÓüG�„kš†?|Âd/â|^²\Í '¼8}ÊŬ *'¯Î�ö(Ö ×÷MXÏϹX,b”1D‰0bGiÒ%M˲ìÂC:2¨ÀÙ…“äc6À¶ Ö¶Ò#HI/Ë¿_ܸ" VçNçÆð÷~Èã*ÁØ4ZG(¥©kßÖ¸ÙäSœs¾GËiæÜ†mq³ÙN˜Ë\cùBGž²=x4F®Û´Ô•Åõï)V[l6ŽHK¾F)apZDk[ª¼ƒl�À×�#K�oZi‚æ,–�'д5ÚÓç›(4# m.)— �³]ß‚‚TáþбšKÍѼ`[K�oÕ µKCy¶‘ð«ÓÒ;Äd»ÛæZšÆi1`ð­ÀCد˃õê¬bÜ„çBî½pMl!wB¤mŸ�OÏ„-ý�\cÙTÞoº®Z+Eº�Õz£x<¾Ï{“mÛ’Ä­¥µwÝ4R4«U-mbÒ4%6UÓ€Uol4­e8/�Öë57®’ç%Å|~N–düüßåøúˆë×®±?£mE¾Xr4S,–ŒÆCˆ ÕêœÏî!?úðc×rttÀh|Àd:£Èk...È’}ðŒñdˆµ «|‰RpûölSPdŽv]Å09:ÀÄŠuµ¦± iœPÛšuQÐ:È‹†EqÁíÛ7y÷½Ï2�¨‹�dz ÎÎÎxþìSN_½d8Hùå_ü‹Œ&ÖåÛÔ¬—3båøú/ÿ"£lˆÖBÅ3�ºR�lQÔ ¿ÿû¿Ëí;7xöíO…eAÁÍë7(ó‚(Öî_c¾œÓÖ-)m»@KHú æMã�ãÇ?~ÊÓOŸq1_a"ÅÁÞ�‹óc’AÆÞÞ“éÔ7©‹¸~í�ßýÝßå~áÞúÂ?�ãÛßþ6ãñ�É$CG)N­±*b~6“jb§HÓŒÁ cY-˜-V¢ê’/礉b<�0Þ›2ˆcß¼KBy¡Î¥³ {¥RŠÊ[”Í÷˜“`ø•Je×Jí<Š+,ÑÝÜKÿsò¿xý!žL/ £µvz×érHîòC”s÷TV¼•Ýy€†mÖJ80OK8M’­5¨à¹à|÷H0ÎH>õZñ¦”uX¬xaøºÚº!(ÞM؃í|I?‡±ëÑHŽ¥Ï…a»¾9ò»Àÿ¾Í´õLÕÚá¬#6)6´fGBfÚÏÆ¸Ë!ËíÑ¢´�Ôô™2ú(ÉÝÏÇq*]z=«sìE…Ü_QMSuEŸí%|o•´�SzSÛìä ûÏä.ÒPæºi‰Þ.BÑ68’(BFjTh�j­¬s%,—s¡µJšªeµ˜ÃÞd(9îH1Ed©"‰ 1[ˆAst°O]—,æ4(¾öÕ¯PÛš—§ >û¹Ç,—5wîÞçӧω´áÑ;8;?æ£Þ—N°&¦¶-³‹³yÁ0ÅéРê†uQ ã&6TUÉbµ¤©Zœ5ÄiŠS†¶©yúôÇÜç!Óý}^¾|Îññ1ï¼ó€²X3[,™ŸŸqz2ã~ðF£Œ2/H){{Sᢌbœ­hkC6£\ÃÉé+†ÃËÕŠu±âGO>$Š5wïßáÉÇb- â!ãñ˜º*hZaOX.r1F�£©aµ,h+‹Šß’ ›ŸÔ¨(�÷‰¢ˆëGG(j†é˜Ép�¶r´µÃY¡ƒxüèþ÷ßþíÿèÐ?ÿçÿéÀ0‰BkZ§Y®rÆ£ŒÅ|Åz¹À¶%e¾¦Ìmµ[ñàöFK²5°T…ÀFC(¸¤€ÄšØ§ÏÈ:‹õ±Ú'±aS ʱ¡ÛßUaôû½ìþ ÞLÕNðÀv=,ñÚNõT?—¨rÂÏ»×7ÆÐx¨z Ž‰¢h«1|NrCÛ븊ªg7D&95ëé—k¦®ÊÓt‚¶ç1ìçœë�D6…™ý9tÞž ÷pÓ íªðhWí×5úÆA𜇃!£á„ýÉ>ƒ4“–ÝJ´#~s {mKåy çˋ圲*.íW‡¦ó\s}´ßnÍÕ›ö@«íPæ¦ÈVÖ"š ÎH�¥êyôQ$- ö÷„KxõêghG×À:�8§ JÑu¨]®—ÔM…qi’Á€b½¢ª*¾ô¥/°X×|úü˜åºfº7æg~æŸûÜCòõ‚k×îrt`8=»àù‹sšR‘çU-žüd‰^;ŠrÁÑÁ×8êºÂZGH”c½*ÉWó‹3î?|ȳgÏX\œ³œ]0›Í:/ò£�>âäõ+lSs÷Áî߀´›P¿>e˜�Y¯ - šfN@Q¯^ž�fÆSóg/(‹š²”ÜWY7¬ò5¯OŽiªZú)Ål±ÀZküÙ?óEžŒ>á“�?¥©ÿDPp/ø™Ÿ½ÎÍ›7‡¤Fsûú Ü{ÈÅÅEÞH¨‚ˆw?æþ_þWþË¿ñ7þ£åƒ;;;ã_üŸÿ‚k7FÌ tTR5Ùh�ÉtÄ|>g<É888`˜8�O©ŠœÃ£)×ö8ÜËÀZ¢$îhsÀ[|ZoÁªƒ€ê —�$ï’Ö~^W)“ðûÝñ“„ÕÛ|¾Ü&ɽý7ë¶Ã}ÈöU‚æR.(ä$z›äu|J_fÖî_§›?l ÃÝë^åñõ׳�'‘ž2»Êù*ô¦Û®÷¹ÙïÝÂÜÐÁu+Ý¿µ¾]%×íÍO­Wð»÷Ù9Çp0brÀÁÞa×&ÄZ¡Y²N >­ŽBL±›Ó`0`4sppHžçÌfçÌ–¬óÕ¥=Ò®" †Ï`¡·—¥�Û6€to¿l/’ÐÁâ»çSŠ�?ùä)7oÞ,ù"çå‹×¤iŠ6ŠºjÉ×k ¯jEÙÔ8k‰ÍÉù ‰Ix|ÿV«*jxøð!O~ü”‹Õ‚'ÊÓ¿¤!Â)ËãÇ�™N'Ì/.¸qó�éÞM†ã„ùª¡<]a�!21–ˆó³y±`�ÏÐÜd�j�`Ûÿ�º7‹±fËî¼~{Ç|æ!OŽ_~Ã�ªn¹JUåšlÂ-A?ðÀ Â�ˆG„ü€%?YBBBðˆ¡!‹Æ¢á ©…º�nD»»mºÛ.\e—ËUuëÖ½õMù 9ç™c޽yØçÄ9™y}‘AíÞŸòË“q"öÞ±Ö^ký×å([SdŠÅ|A’æìírttD–$h Iã8ÇÇǸ®�”6i^�%9ÝÞ€f«CR´:]Â0d¶X’\^bY½Þ€aG`Ùÿ_PñäyÎr¹¤ÙvßLõ{´ƒ&ŽôðÝ&�f‡<É¡¬Û÷á‡_äw~çwø­ßú­Ï}ñ™Úßü¯ÿ&n ÉTŽÆ•§ í®¤ßïr~~JÇ,f7´ö÷yòø®eVM–4/¿ïûK’•qšŠP1+_öª´IS.VAØmº•´æÖX¹æþ_´JÁÕÛ}î$0ÍP¡¬ƒ…2$—õ•¯a%X£ÃnYµëmñkJPŠÂ «ôm·Ñ¶…#·tìv'lZkÆòYãæÖÇVh¶u msÿÝ `ÛX£·]žëxÍ:öAIµ´¶lél\÷.—ëgµº€¯¾ç¹>ÃÞƒîßó(t�ÒZ+¬˜ÔÅê^Ö±ÆZTE\ßc¯qH/p=¾æfzµrÏ�AK®s‹6wýÞÔã@+ξêmm)–Çë2>åšã*¶nQ23è’Äwg¸�mùÜLÆÄqŒ´\º½!RhlÛ‚(Z¹ã¼ —Ð |”αŸËËKF£=–ñ’ñxL3ð˜/g\]žQ¨„fÓggØb1¿" ¯iwmü®.¯šÃá€ñ,#Ï1e­•f:�“åžï.cA›Àó‰–sf“)YœaK›Qo€|ôã?çâìœV§�ë7H’„¢Ð|ôÑGDqºJ¶]�ÉbIrr¸·�åyæ©*™Ò,'I3Sz‹V'áòú-,Z�6û‡GŒ§~öñ'ìîî²»»Ï|¾d…¥+\"¥F!¡YæËÛu‘vºBª~žv¯úÚ×¾F³Ù¥Ñì�&9–VDIÌëׯiwZt:æó9{{{¸®Ë»Ožð¿þïŸï~÷»üÒ/ýÒçîÀ¿ í�þè�øÃ?üçtGŽãâx>R:d¹¢ÙòÑZòèÑ1çççÌÆ./Þb1B7\t¬(²{8À/ÙpU“›‘©¢Dm®è-¹®¾¨õš,´"�¬¶¯’/k«[­õ*È ›Bë³\5wZ(b�†«+ĵ 0ß­Àõ}&&Tžïs( zL¤êoý³�ë˜Ó]–H}ŒJÝo­«ýë}w[+PsqnÏËö þ¾ëÕ]Œ«1‰ZÉ‹ú½‘òmîïšÈµjÛ×öõ7›Do-pº­û£Cº�.y‘‘©l£¿æ@V=Õg!J-T­ V SQ Çu8Ü?¢´8¿>e:Ÿ”ùMÔZ=/U�ŸÛ÷°V ŽÍçR­ž¿æž—JKHlËÁñÌv×vð¼&-¿ÍÓ§ÏùÙÏ~Fž§8®M–¡±-A¿ß#Í Ò"/9-SrÆ‘túN_ž“)MØãòòœ�ý=:¦=èñ§?øs´°PyB³ÝF:’4^²X*š-�¢ðè]çs’¸0¥!² ¥­V‹£»X:£áÛäiD™<&Ç2IªíVƒëù”éä!ó錖 vv�F¼y󆋋+ò<Å÷,Ç¥Õé¢Œç –‹Ãn×°…$LbòÄ”�ª ¼ºáý/|ÈéÙ9ópI·ßÃu|Â8b:�“¦)�n—é|†Æ*ã€ÛöÈ ³ ÿÒ—¿‚eY<}ö ãñõg<‹›í¶c¬‡þÇín×$bÙ.BHÒ,¡(2®¯¯i4tQE!û»#æ“(rŽ÷ùÝÿþà_ÿÕ_]áîÿ*¶þð‡¤iú¹Šç½|ù’ßø�ß ½ãSEa2寒i¶[,– Z­ûû»ìŽvB1�\3Ÿ�ql‹ÝÝ!ŽíæÞò Ës²<_@Ú ¡d™«"-‰.ó\ß[Åê/gVäåê²RPUÒÔ„³¾ 8¨ É*¨_ÿ©„ž¢¬I_Y 57�4+ÌU@»”OEÉ(P]G²iÔÐÚÕfPég»ƒ(Ý{FéY¶\WyE­‚J™¼®Öª´À*k£¦|$«2›JC­Ž«VãõÕw=fW”ÛJ~%TU±aޢΑU-"ãî“Ò^! …�Ha•ÂÖ·ö†‰ÏñcŽ«¬‰�Þˆ£½cÚíy‘&óÕý(o`M !•I]õ»ü§Ù\Ðè’b&´‚Jiâ$2 —µ<¡m]Ÿ×º¢ZÏóf¾T^T‹ 3'*7�²L µ±,Ïõð½&¶ô¸¾š0›ÏXF A³‰ëùtº}šÍMœÄ&ßJX–ɉ¹_Óëôèu¼z}B«Ûæàè%a.iwº(¥yóö”ÓÓ3z½ ?àêâœp1 ‰“‚ñ$e&4›M͆Q (|ß¡ßïÒ <”J™N®Y,¦8B–5{4y^ðæô-…2š† {û‡(§§gdÊ0áçIŠUæ=y¾�ÖM‘Ôj–¤YNQhòB‘e9I–3™Ì(4›-Ò4çúzÌx2e6›óᇿ@ŽbG�aã8>Eaþt2ÃkxÄq„&goÐãääär »ã'ò{ÐÛ·oY†1ãë ç—çÌS¤%˜Ï&ôû×A £Á€�ò#vº=ŽFx–àoýíÿ‘ïüÒ/Ñï÷ï8ý¿øöÕ¯~õs)Ÿ§OŸòë¿þë4;>ͶO¡r’,#IL›øt:]¢(Ä«ˆùÒËŒ†}vF}Û&ËA“B¸²RŠ0-ë²ûÞÊ…Vù½� åU ¸¼¤Ã¯gÏH°½™E�¾µ:6 èvp[Tûï²°î[` ¹æC3‚TÔ¾S«SsmmºŒ¶3íËqldê+¤,Ae,£r_«íõqYeîTõS�n»°6+�Vß×zS¡¬Šþm�¡n!Õ•¶Üº~‘ש3WH)IËÒ®E-Ð%«òö=Ú„,s …w[¡ lËfÔßå`÷Ç3Ü~šM…¹�X¶ºªJðëc4뼤­Dh¥ŽëÒiu@iÂp¾ú^uL•,¥a[¯ÏÙÆ3&„)M]S`yQŽ¿ÌÛò]Ï€S,Ãp�Rd©!œÕJ0½YP&'éÍ›·ÌçKó% O¦tZ’4Á±m\×Áó}\Çâìâ ¿Ñàõë7a»6ÂÒ,â�nÏP×8/^¾%‘Ò [÷wIÓŒ8Jɵų—oÉò‚Á`H£á“¥)I“$yž°»; ÑtñÇ6ÕPmÛ<ç�Fa¨œd?âÑÃ'tz>úè#®®¯É² ÇõVÌžç‘9ËeˆcÛ8ŽË|6'NR¼ …mÛLç –Q‚e;Ì!Òr°m‡ó‹kSžþñ‘EN8¹á�ƒ]vû~ûwþïQš1›-¸¹¹aØت]’v¢Q™"‰)[†äyNZä) ¨ÿº¬F¬ÙBúÝ1¶ûž•N³Ëþè˶Pº¸¥|¶Ïµq¯•24>õ¸�ØŒ×Ý× e(v�ÈrÙÞvµY–µ*8WïOýù«à諘T5Öò<×××A“““æ³%‡»{„ᢴ¼#|ÏÄ­÷÷÷¹¸¼d¹\²\.KBb…ÔB /0¹1Žç•ä¦9JØdDiŠU@VdäZ‘Çv!@º8v‹NwÀÅù –\²\dLf)£AŸnÏCø¯Þ¾áÍÛS«(2r± ÐË8ÁwèŒZ ºÝ>××7dy±ŠÁº@HÈÒ”,Oñƒ×ó(” W�¤9¹†Å<äêú¦ŒÑÌH’iÙ†•Ä’ =‹%W×gäE†V‹ÅÇöˆ¢„0ŒÈ¤Y–ÍÙÅ%ËeDF´Úƒ!I–åX¶ƒÊ5³ù”V+`o�n«Kà¨"'‰#fÓ)–tŽëHÞ}÷1�sqvñ—³€Ïç»ßý.y¦it›¸‹xñö-³ËÞ=~ÄÁÞãóKŽŽxüøZí.óŕŴ|Ÿ–gñk¿úÞuøîÇ?á·¿ÿÇ\ͼÿÞ»?|H·×§ÓéÜ×…ÿ_Ût:åf<æää„§ONа=‹�GäYJžåh$H Ïu°$Xvƒ,ÍÐú½!‹(-i5›\__Ÿ¶¶°l�çøXJ•$Ž†É Žc`°-SŠ¡Ìv¯\0õ7ýóZ?õ•~[¨»ƒª¸‚”Ö¶{ÿ–UPm»eýHÅí}·ã ¦Ý�_v«�Í(ŽÍk­ÎÇXe,âáW«÷õ>ek¶m– ßF•eY¶ .[·¨ ¼÷YŽBnnÖƒ·!åÛs ·LØ»Æ{—e)„`ÐÒiwHótÓò›ÇÕçkum!¶h««­·qÛÀ®”�ù¥ÉŠ„n§Ïp¹àôòõÊW-F?k<æ÷–eæ@sß...ˆ£Ïó™ÍfL'sF£R~ô£á7<®¯/1¨AÐô±–al(°®¯Çôû]óÛäJ²X¤¾ËxâÙy–bkAÓó°,Iœå!…àÙóÜL'xAÏo ¥�åØL¦S2‘Ћj8ìÓëîr~v…e•$ž³in¬u–‚ÊÐÊ"N TZàØ.JH¤å0�ÍY,#â4§P …ĵ]‚†Ãr¹äìô‚¬Éó˜þ C™X×u2co÷€ÝýC®n®y{vÎh�F«ƒã¹¨\á5ší.QdX]LiŠßñ¹¾¼áƒ÷i!¥Íã‡ôÛm^¯BÐj|ðÁ{|ë[ß@ZšÿàG·îç]í^4 ü6Y®‰ÒˆóÓkúÝ ¿�Ê ^¼xI¼ÑÂa¾ˆ¹™- ÅE!ȹ±æyŒkÙ´[ ~ñýG�'ø~“ëEÈõ‹O8ך4+ã ÊÔe©V|yš‘å™![Ì ²,'Ï re|ÜZü  Ýi› ¾Ö¤iÎ`8¤(*’Ê*ƒ_áX†&¦Ppy}Cœfh)M9ÏEø–c‘e¦ȳé88®C4Ÿ3Ü0èöi¶:ô#^�¼áòfJ¦„aÌr™�ç` H½œ4‰ˆã˜0 ±ÐdyJÐhÐ’í !“$ÉúïÊ[V®¸U%à·^Êê¸j�Â|WŠ5-ŒÖe!²-a{× ¿ár¹C1Uß¹Oélé·ÝTÛŠku,kšùNY:|ëš–e­#ëI¼•ÒPyq§«Æ&*7¤Þ¦$ÚL�­˜ ê­²¨”OÝ}T·Š¶-ﲘd-ñ¸î’«¯ðÑr…4ry»·m+’j[Ão2è )T¾¶hj qµ­—�›¨¸Êíµu�úgÍý €ªY¶ R3ÚÙcÍ™/¦«¹¨æw»mXêÅVÁ> ÂG4›M¾ÿ½?%ºÝ>a›ú8B4<úýžA“z»{Š\�)Írb»?öœ/}éKÌæ£�‡ëñ ;ƒ>oÞ^ñàðˆ4�� ¤e\ñª'ƒ7gg¼z}Fž –qD³Ù¤Óèñúô%XšIh8ÏÏÇìí„QF£ÑDH!4‹¥IÞͳ„"�ˆeâ]™ZUP—ZF1–å!-‹¬Täq“‡—WçHKcQ�5æÓ1I’Ñj¹ºµó€é IDATºáòò˱9|ð�_øÊ—ùéO?æù‹Œ†»d% àðà¦|…aæ!R†ý~ ™— Ži4Œo> McZ­Z+ÆW§\\\|æ³Po÷“‘ððøÎίÐRðìå'\]Œi7šx¾Íõù%á2å¿þM.Ï.XÆ“0"žÏi.Ž IœÒíXí;A‡\:Œç Ò4&‹ÄYÆb’‹å‚06ñ’ Ñ@–„…¾ïÓl7¹ººÂòžÓÀq:Ý.í^›F³ÅÉË—Œ†;¨F£=¤4ÁG‰�fyŒï9Ì— f˄ӛR-(  ÈMöq¡ð< å»x®á®Ê•Až¹@Ððiø <7@J”I–d¹f:™#ÄM�kI”ÊÉÒ¡¾'p›f«…ï—ÔîežG’e+.¸•‚¹ÃMtß ›A÷º+HJ¹*™Pw¹l¯t?KñÔ¯·�Lxk¿�µ:g�æ¶ v{,•«kãŸ!ܪcn%‚n'kws¬w+âUþIyn×µo�¹îFºk[=·çÖÌÖ,Ž¢(Lq·­@üzl¢då¾-ü·ç¢>­5½Î€ÀHŠdãØ;­´ÒÇ)‘è6!M"míÛk}X}Øšÿ»ú¦µÂ÷:­³ùdCi¦•/Ä*Uaµ�Ú\iÉÉË×ø~À£ãǼzõŠ«ÓK>|Èh¸Ëb1ãã�?Âó>z—V«�å\�'\\^‘O¦4š-ò\…)7ãqì’DE´’\ßÌIsSÇgÆ ¢ÔXO¾—ÐéuhOçd9Ì– ”Ì@$Œç¦¾�hãùŽãPD–3ž.q]ÏsÑ"!Í@+A®&ó•å-É2�Æ, –‘!'m6 lt®( �ã:¼÷£��¦‡$¥Õ ©ãñ³�_ J&,ÉÙÅ9ó?^RäŠ~¿Ï¢¤j·»|áýðýÏŸ>#�”Îh·Ú=À’¬ÐyMž¸L³¯^|J–e®w‹•ä³Ú½ H)ÅG}Ät¶d>Ÿ£dSEÚJèwº±œÎØÛÀÁƒÇ\OæäJsqyŠciò<ãôìJ)nn®È¢MeY„yÒB:6qšâø­þ»Ðtû=†Ã!E®—!–máÃÇI²œ$‰9;?å'/Ÿ#^i¾üá/à÷:,“”v«Eœ&ìôwÈEJ–¥”$ýë §dYA’dhiáØ.RBgXRRØŠXk…ɪ¶M µÝloÀd«D2S]",‹°, ,„Àw]º½6�N�4Y’„SDY›D)Eš¦äÂ�$I°œuNÕϺr¨ÇxÊ�«ÀªÇ‹¢¤î/-D%À6[]ˆ}•ŒVr3Ö$Ei�•»Ž[B¾@C%`îˆCÕ“¦+KgÓ©”1H±m%¨µ¾Í„p߃½1• Y�±rÕ!ÎTäÆöúêJh[I¯æX–JMU­Ü8^©uR%¬-ÛÊý´mEݾ?›®H­5¾çÓk÷ÊXdÙŸÚ1õm•Kn³Öëmÿê†Pl~ØX0±¾o”q"s>EV$tZ]¿Aš%wÏ·­íúb@é͸Ób±X½“_þò—9œŸ_rs3!Ë"óÜØßw ‚&‡Ñ ±—““×´[]²\á ¦“9EÐëu ã×oq~1A¡ql�ã‚ekWš¼žV“fÓ”:(”6Å&-É2^ ­ˆ›é„ Ù Û°ÐÁs[,–š³7ç$*§PÛn�¤ –í"m‡,ŽÑÚ,Âã\aI�)=fbÌE¡(t†R`;6Qspp€ç‚çÛXÂÂslð=,éòèÑ#^�œsu}M’›Ò³ù‚ápÄ<\Òn´™Lf<þ’^§O8_ryyE§ÙBhp‡<ÍÐBÓðZdiÄd|ÍÕÕ7W—ììì µ�Ê áêçm÷* W¯^ò­o}‡—'oAd´;ï½÷^Yø Þ}òÿËßù;<}ñmKþÑ?ývFÎOO±h6í_øÂû#SPiZÐn¸ØŽ�–‚4�–Âk¹hÂe©¡HïõM¢›P]&åL¥´[m’(^ݬf³ÉƒØÛ’¥!—g¯ð=›�á×ó˜ç liá> ÆÌJ÷ˆ To+¦]ŒD1Ðpaª,E�]¾˜¶‰®›z7ŸÑîb(�°ê±#¸•¨Qö+]*ÇM¤”a™PÂs�>”U�±š0En§*£Ä*.1Yº¼$bU¯G)…å9}ÞV@·çò>w] ®ŒC¸»R쥲©³qo[=õk®~”ai^�£¦L…†�».l1€QÎ?uëø—jý¾U­á·ð|¥ c™nYÕ+ˆõ�óP³ŒWÎ^Q}¹vó{¥„E嫯, ¹j^ÆïÍ&­f—E8¡*s^ó6V߆5¢*«aÀ5¤Ùf!QØÙÙawg×Äêìîï-cæó9oÞ¼á _~�ÅbÆ›7§¤¹Æó;t;†ýo_Ÿss5f>]0 ˜ÌM¥änoÀ§Ï^¦r,lÇ ”Úx3zÝ.£½QÉ)ð<�“WoLiZg¼÷þ–QÌriÆ&´yv÷wÈâ„,3”8›$Zâ{.¶-ÑEéÁâ4¤Õñ°p¥‰ ¡cò¤°\ßµ9Ú0ž\Î'XTî±X†ÄÑËjc;>–㣲Â@Êm›ƒƒ^¼x�mKÃ�'¡Ýn–TVš´È˜M®8>±˜™*Ù®wLÃ÷ zô»-–û†�Aå–å|ÎjÓ÷* oç›íñ…/¾ƒÖI¼ÀÐ ¹¹™�fs¤[p3¿Âk9üÊ¿ñ¯ðî—? hxh]4.//iºv§…°A³ÉåëÎß>åðø��ý=N^¿BKÁð`HE,“A; »>dz|–QÈh4 Ó|¥�ßd>_prrB8]âû \Ï#Ž��iuZ´:  Ër±@å>ÂÀÆs …Æv}¢¤À²]\Ûg>½AX7ã9E²`´; �3 �ÓmwH– ;¨¢Š+4�ÓÓS\×§Hl!ð[“É„†oq}qJš†4=‡á°�ç!™$‰)ê& me�éB¡ÔZ€Z¥0ÒJ!k\d•ß^¡‘Ú¸·Tn˜%,´‚,ÉVd¨UM&lÅ,ê1ØÌZ¯ŽW˜�?e<×p½Ù¶…Ú²Rê9ZåTjAkÖ1›UÇ,»+e&„UyDzJšc Z—Ž%$–ëb[†{UGˆÍUuZäã†ué t1™|×ó°±P:7.­°„0‚A¯cGªì'Ôc`kK´N¤­’½ ÔÀJ•÷²ŒÍX–U,*el”´-L=£º’«[U‘eY·\ÝvÏ¿EÉÙ'ÄÊ"YçñèZÀ�0¡*öžç9¯_¾e2ž†²æøñƒx D'ŠõB¤ºN]¦y^d j­Ýêq9¾Ä€¡tYöÁF(£x¥�¸®ƒV�ä)¹(0ìc«rW—,¶e±·; �R¢eLà:œ½~EÃw¹¾ Í<å’—'W Ðï÷™Ïb–³·¨L×°R4›MÆã1­fl‡g'o‚X Q<#‰cÍÃÑ�~¯ÅÁÁ.®cqyyÎp8DϵÇ3&“){û¦j@.xóêŒF³�” šÁŒv»ÃhÇçõë+‘a6ûƒ&{;CÚí6¯NN˜L&L'× øê—Ÿ€(øägOi xûæ’Â…ùrF`ƒ°‹Ù)ž-MüPH¢¸ Ï]^½:’f9Q”ƒpXŒ¸MŸ««+³�ÖMÆ >ËxŽí ’,Æ \&óK^¾yA»Ýæ‡?ü�ÀcŸa¯Ëp8bgg—ñtÊÙÙ9…%áòó) {aØ;£>Ž+h4\”ÎhZ+�Ë–8žÇÅå9ZÀë·oÙÙÛ£¿à5DEÆëÓ3>yús.®oh5¼½¸D ‰ßôQB�f)Q–àù¾áC³Œk¢ÕjÒétËRß´¢áùx¶Ã›“W¤qÊ ×çÉÃ',K~þé§YN¸ éu:ôû=lÛ"Ž#¦³1yšáh�ë¸d¼=½d™d \ÏÇq\¤”´Z¾gcKIž¥„ËÛ²žKš&Ìf3|ßçøø˜F£A†Dah ŽIE#ðY,§äyF–'ˆ2ϧ×jà”ÁçBÐE»6²µ[GJy+7È–9#3Œ¨[[–c#«Ur©lêg°¶â Û®¤íLúí•|ý¼FðˆuÌ@Ô¸¹ÌÎÕ5ÌøÌX+¨³À² •Žc;ÅÉ„2×r,gE,© ãàSEa”Sy}j ´ú~]P×­0#$7c«qÔ¶›dP»TTå6K`[ÖL{�7´Ùî¶Rêh¯�kêÍ>Ô¡Ø}‘Ðä:ïæÎ˜×Öóâ:»Ã=,ÛpwUD«æZ¬~VZ玹øä§Ÿò?ýíÿ�§Ÿ6¹¹üUN_?ä'?þsþïö Û GÃ[óºñ •Êi½]R6³å¬d¶°j‰¯fg�±ÐŠLÅåsc•¿–á—Ó”¢áû,æ .ÎΙNgL'|ÏÁµ‚Vƒñ|I«ÓF+8;;Ãw...yþôéúI±*^g;‹($Ï…ÎI²Ç‘ìíŽã›¦“qõ4ñìÙ3Š¢ ×íÑnµ¸º£ �6ºL§SPŠh9'K–8–DŠYdx– áÛ¼÷ä˜ÇÉÓˆ·¯^àHÍÞ Ç>xÌãG#úý×±9:ܧÛná¹Q8g.èöš=ØÇ±-¢0d&,ÄÙtÉÙéËé‚´¤ìj·[HËTîuÚŒv4>nàÐkwX,Æ|úÉ'DÑ’f+@ÅpØ¡ÓmâØYQäÁw}yÅÛ·§XÒÂo4è úôž={ý—ƒag%5ˆLP %m–‘©<8�‡hérq3áìêŠÉŸü€,Ë8|p@§ÓAH¸¸g éH~ú³OI²˜B+<Ï!N"<ß{ Åb6Dz,ߥøìôº¦äƒôû}–Ë%|ñ 4›m®¯¯™ÌÆìކœ¼t —sÜ—‚† ò‚h1»Yàhõz %Q–DY€¬P¤yJ‘§´›;>Áµ‹ù”étB¦R¦Ó):KÉÃ8«µ)� €Ñpß÷Q ¢ªª©”8¶M¯ÓåÁá»;}Š4*ÑÌzC8I)±Äºå-ÿ¼þlÿµ¯d7çÞJ”ÜÚ›. êq‘VN¬ò…Ww·m!Wý¾+d[ˆ}–€ÝÔQrBˆ[VCÕVVEQ˜U¸®!¶úˆ^#¹,!PR–%­õºÂge•T×(ãHÒ1–�¶ôJÁkj{ÍB°=6­õFQº;•ÆÖœnŸã.!Zoƽµòë¹¾A¸}�¶•×*^µ%€ë×0÷E™•~­m�u»ÿ•e©D±è¸k¶ÿVJñþÞòÍoþ~í×>à—‚^½‚Ÿü\÷[(õ{üï¯ñüGÇ+äcu.Q*™úøW}鵤�m;‹Ÿí90ñC£¿Û”¨.²Œ<ϰ„ ®k¬j$¯^½Âs\vw÷é¶; “É„¼Hp<‹½ýç—gkäEÄáш‡ßLIó‚Å<Äq C‚feY8AƒLG¤IÎéù5³Å’8J š š­…�X®Ç|±`¦dyŽ+\n& Úc2�°ˆB,K`¡ ÃU¤4<Q(l¶”Ìnn°ó‚F£‰'Q’1›Ì¹º¹Æ²Z|úÉÇ|ã_çñ£‡dÙ’ó³ öG;ô:-³9¯O^3¾“ç OºÌf zƒZ­»»»,Ò3–q†k™¤ÑÉõ5áüŠxÞe8há86…Êйq<~øˆÅlŠãØDQD»mèÒwÚÝ.§§�¢‰šfàcK Khò4!"/_å`—ƒ½>ý~�Ñî×µ9:Øãà`ŸƒÝ!4Žå²XÎPîëÒ v†ÒU³mð<ð}h4@ʯr}õg¼ûþ„�FÕ£t¶•ªªžYXYdw8×ó¡×ùAŽ�&¥B \iƒ´qÇ jã”(ŠVÜn¾ï3žŽñ—\¥Ø¾�íJ¼À¡Ùôyç�G´Z ÂyˆRE¦ˆb Û–diŒ--¢Å p|�†Ðjµxøèö¹8;åz<¡È,©±t;Q–e9‹EHš¦ôZZ­ŽãáX�çb¦˜�"Œ#T‘áû>è‚å²tÁÙ‹ÅŒùtB·ßCÍt:ÅïØMËv�¶Ãx:e%¥§@±“îÐét8<<4d¬–Ç ?b<6Åíq¸¿‡ãX4>AÃö-ò,æäåsŽŽÐZÓn49Üß!>2‰¼q˜ uAÛk‘©‚4ŠÑZãJ‹Ð IC#ç�…–_ÒŽ}žö™y@IbêW¤iŠ*,–¹ÁÚÛ–ËÁÞ.½N—‹Å‚·o_cëŒNËg¹˜ðöõúÃHA¦ .¯¯Ej´~2ŸÏ ‚ÀÔÞp-²<1U…2ÃaŸÝ]ó ·ÛíUÜ)ÏMÂm:i[ „J­ßc�ÎoLjª}õs­„‚ØThy#© ™JAmŸ¯¾½rѬs|6ûY¡ëDmå^ [¥v%ìKkè>ÁZÍOU¼JÊ,Š‚²m{•È[·mÛ÷ò©U–žmoZ€Õ1õ¶íÞÚ˜Omƾ=+Á{Ï ޗ»úWw•Ö…ÿ¶›Mßqλ\±USZ£ëFÙ}ÇÖ­jó‰Á΀$ý!''&æ†Æò™Íàõk¸¼„é õg gNPÂÚËS®Møµû¸œ¯Êö¹Ë½ËM,„ ð|ІÍ9/yùܲ°ïû|å+_1D¿�)ŸÝh45ºÝ.×h˦Ùl0�Îètz¹æôô-{{„˘ÅlN»ÕÇ÷<¢0e>Ÿ2¾ºfÅ,^¾àºm\O"-…ty¢XÎ'Ì–>–#H– �²xÄÏ~ö)oÞ¾â�'ïáyœ0 CéÐh·�ÒÛ!×°Œ2‚Àf1Ÿ‘eFAe®&.Ç´ 'oÞ0 š-º�>¯_Ÿ.cnnnèt[hmÝn—ÃGä™`±ɲ‚áhÃk)h¶ºØ¶ÅxrI¾HýZZœ]\1öñŸù|N8_R(˜Ï—äE�(õÀ¼Œï?8:¢Ûjc I–¤LnnÌ=*Ô�Þ€ûÚ½ è½÷Þ£(L’T¨,¥Õjá:I²dИÏçüÂï0¾¾ÀR)½†Ë °˜�¶› ZMÒ(„4%*BÇáb>' Cúíö÷h¸ÝN›¤Ùä‹|@Q,¦3>|È»ï>Á²,&7Sþ¯øÏMÎK‘ñÅ/�Π…|5éº IDAT}¢ÈÈyøð!³eˆåyDYŒÕh0<Ügžx^ÇvˆÒ„étÊh4"Î3:­.Ãá�‹‹ &7£zÝ&š!³Ù„›É˜7gÄiÎh0d¬5I²X,‚iÛ4Ûí²ø“‹e nn&äyÁñÑJ)|ßGI�*L¢—m¨ç³,C[%‚ik^w±UŠ ÍÒMwK)�+A_›B¬ë n; %tWS`m *e8õJ¸¸§¬•†ëº+×\eÑÜ'Ôï}¼u÷–(¥éýÒÝä¥w_*ªUvõwEhZ]«:ßZ¨¾·•ä}JHieÊ.¬MÊÁoÎI‰é¯ÿÑ“cßã‡?ü×ý"×ׯí–$FùœœÀÉÉO±äSÞyçe�¦²Ô1¦c&iX ‹R&gL+Ež¥+æ”A˜{h!pËy²„¤øè¼@Öú:ŸÏÙ;<`2™Ðí @ Zݹ2ÏÃ'?ÿ9½ÞœV»�*—7ôÚ=´ÖtÚ^¾<¡Ýî’ÅŠ¨„\£ã›)ýþ€n·Ïéë ße™%üèÇ‚DÓîøt; öG�v;8Ž… äl6þç?¦ÝnP蜫›Ký¾ß ¿{D%dËâz¶d6›¡µ ‘äÄe~`‘Æœ�_ÒP–ƒßðÙ=˜˜–ãñÓŸýŒédI–™¢´àÕ›× ‡CaÈt>g>K�åø\�§  ¤ ¹¼8coo—|"ðC~öÉÏiUMY嬪G÷yþâ)LJx® ­s¤וôâyž³XÍ™LÏip\m ®ç�­ÓDI„'øÂCä-uS“7šÅ*ßÜãišScçôšÖ²sø¾Ïp0¦©³Ù Õj¾ï3�/˜Íþ†§�Ÿð�o}“o~û;”eI8 XþbI¨ð5 èüüÇqxòä1QÚA­p„!îÊxRòêÍWè2çñ½#þÛßù-Æã}Õ2¹šòïþÃï¡ { “Kî?8Æs~ý¿Îÿþ¿þo„~ÀrzŰŸÐOÎÏN‰’>ÿìŸÿ×|ÿ7~À—¯^' ¿ôñ·1«†woNñ}—ÁþˆO_þœ4M d‚q‹Å7ŒiŒÍpò‚¾MÂsZæË+öƒK;n RHêºÁ MUâ 8Ú“åK\éØ�Œë¢qØw�ïã*ÍÁÞc ËÕœ QF³\­89{Çr¹ÜX$®Ñ$Ò¥iK±Ãu¬Â}­ŒÖÖÆ®�]AºÍº|-¬ìyJ)ŒsÓݳV@wÁ¬·ÛúýnýZ99ŽÍÜ—Žƒ³£6·ú’ëJ±�Ú²"{ϲs’ÝkÕ}ß¹nûþ:OÊYpCbº»Ûß^£m´ýÝzjGyì ò»jT­ûøúÑíÏïr‰ÝµîÛ hm¹­™¶­ßuw»Šs÷šÛŸ×MM]×DQˆ6ժͮ`$p½É`cé¾øðÿݯø½÷;\\|WþS0`šÿ c>å_ÿ‹_çчÏnÎgmýlõ#`ëéØu�B�7%J5¸›Òä)ž³.cn+…@£�¡ª+â~W+ÇÅ45óÅŠªi@)¼À§¬‚("]å4­f:[àù!®ô1 0I8>EÑÐ5RÚÌ(J\�ñxÈr™òÙ§ŸÐÖ5®+xtpŒ¹ÔUÊba0mCÝ$~ÈpÔ§5.u[YFuÛ�§u«Pž>yNVäd«·jÉJE^f̳œV)¼V3]e`:œÒTMK†D½>JYàŽëzôûue¨«/ŒŒÆ€¡QšU¶äâ|Âj™ã… ƒxLÅœ_.X¥ ÊÕ ÇsѺÁàXfí`4œ¾»Âq,Ky?ÎqKÏsxð€ªjÑÊ!Ï[&W ¤”ì�‡”­â‹×¯‰Ã�ÁÞ÷ŽiG#þêÕ/ƈý^txx¸1��1ÔU�ïy¸ÂÁ<PÔŠ³w'Ö5âx4EÎÛÕŠé|N^VžG©*ŠlÅý{OøðÅsžÜ¿Ïÿò?ýÏÜ;¾ÇåÙïÞžÐûðC...¹¸˜àú‚0ŠyúÁszã!q’p8Þ£�¬V+æé‚«·¯øì‹/99¿`Ø î�qÝ€ ðŒ@ Õ–¸N@Jö÷†$IB’$,ÓéJ\4q Úš²È0R°ZΉ¢`×BÐï÷ ‚©­6¸Ž¤×¢”áõëפiJ^äyÞQ’[…àËkÒÑ(ŠÈ² Ïópÿ:Þ¡š ¢ÐéÔ¶P¸ñ×¹™ý¾«€ÄUÏ®[·;ßí^ûFÆ?–BesMç&XØ(¥� nG ^�ëú;!¶Z¯kÔl`´Ásn+Ÿ»þn¯Í]ë¸ÛîRÌÛs³cÒ× Ó·Ú® îë-µÝÍŶÝ=ÿz nÇ�¶Ï½k�«º¤(sâ8¶Áñ-kum©¬‘1:Ñvºq}~ü­yñÑsÞ¾=ÅyõGôˆGÃß:üo˜Œ‡¼×±œn·ÎâÝŽdZV ëtŒKY´]ªX.D×umUáŽÆI)…çy$QŒDØ!Žcúý„ßxN£„0D�‡ç…¡›Öž_×DaÂññ1³EJ–,–M­Xd%«¢f±*˜ÏW£ñý%Ež’e®ëtž•‚À•DQ„Dô}†ƒ1�RäS´¶UT†!‡‡Ç–ȹ×çüòŒ¾Û§— ÷Câ^AYµä•¢ZÎ;¥h�A‚ëJꦤª¾ï‘ô„�¶µÊXµ5�´UCYk.'sPhÅ|¾b™.8>>fÿè>ÒuyùÕkß¿G]WüüÓOØßó[¹ÝÞ«€Æã1yžuÓàú`h´có<üæ71F0¹º¢|ŸßüÍßD5-MUðoÿ�C/N@i~üã/^<ÇñÂüõÿ÷·”MÉÙÏ~Jè ݘÇ÷ "ÁßüéO¹XÌ’^˜ ½ˆÀQ¨FS7 ?´ÐMÍp>}Œ�ƒ+}´Î�°)õà`XÍgB³X\¡û}â8Þpµ�…÷Ø4O-šMh../¹œØ²³AXþ0Ï£mí§n»Ý¸ã"½€ÕbF…D®´îˆNÀ¹®‹'� aÝÖˆ»÷ Îm�³ýwÝvÏݨw åm `×eŒE0½õw}lwüºœ„tׂ5e�EcI¶ƒø›øŠéœßåút\kjË¢1ÎíùìÎy{Ì» Èîðo&²®-¦]‰í¾¯ã'-àn›þ¶Ç²{/à6‚�ÿÝ÷n»_›õ[ó¾{¿žÏ|9co|ÆÜȹ¹T[[—æÚRÝn¾ëòâÙö�øør¶ù|XÖUÐúš]ŒŠ?û|l¥\Ö1"Íri“È×NŽ�¦¬h«ß÷ñ=¯‹¹žg¹]‰ÂPT%ÕbÅ»ósÒ¼äàè¥ mQS7m$ª× ”4µæ«Ë7|ôÁ‡8Ú±]ßüæ7õ{ÌçsÎÓžë°7îѪG*^<¿OY–ø‰dµ˜"ýŽ­£Ìí†6 (Mcâ—½=éŶ\ÂpLØßçj2ãr2ã矽ÜÄ(}ß§ié*£i7êQ—f ’$!ŠBÂÀc:›`š×s¬W× Ùß¡Œ!ÏJöÆGx¡8ˆÊ TMY6dYIUÔaˆÓÏô}—ªÈó”"+Ñu�FDQÈh0¢­*ʲBh¨ÊŠ““S"ÏÃCÛj¼ ¡j ¯ßžlò%Ï&—P«–érÁ/ÚÞ«€ç:0+¥´ºÅÑ6v<Ú§èŠ)=þyYðãÿ9û‡üËßý]>zÄ_¼Bû¾ òöÍ’$aq5co�åb�³Å‚ƒãCÂÈÃ�c>ùéK.§Wî�™•Whf³ÿùoÿš«ÕŠV+®V)ûEE¸AÇ+f XÎ)€Þƒ<:>¤ÌkKfiŒMò’nŸÖªeï`ŒÑMS³Z­ˆG#’$¡uum}ÓRÚÌã"]Q×5U£è'ŽcÝv6ïIn\dvíì�ë÷û¸®¼iYtkëúºª6Âc»­ûy²d#t¹)¤×¸©íël[G·ï÷û³ñ…G“6ÆRKW¹î×ÙRnÛ×Ù&ϼsüwŒéƶÖí®ïïz¿Óûâ:ëc¾öºÏàönÏã.‹e×}x}�ÛëgŒFHgíÕºÑß6Þn+Êœ¢È ÿæ¸n¼¼­ÐÖMtE XDÁ5û:7 ¾R4x½ûFgߘç ^oèò’ª.6Ê¿m[ `>ŸSq³7o�eYZGv€ešòÕ›7Q̃ð)Ž”TMK[”,3{|º*©š½L)ó’Ó³sîíòôésTUÚ|›ù ß÷è%!žç±0¤m+âÄå[ßþ�ÓÓSZ£Qh|?mHÓ%ªnðäØºëÇó ü�ºUdEÍAoŸñÞa8 la6]lbÂ�V¸Â¡iQqïÞ=?z€/ê.©Öqª2§pÎOO8Øëã1—ZÛûí¹MU2_®xòüEY2�NxwvÉr‘�ñpƒ„°×G75mÙR»5Æ(zq�^l¡ÔËåÜVqv=|éR4Ug†~„Q0OWx¡•ey™3_®˜-BüÀºñÂð9Qž±\̸ïàÖ³ø¾ö^äû>UUQ×–û­m;^8ÇA·@k.½ äÝ»sâÞ€««+¾xùŠƒ{÷øç¿õÛüÉÿ)g—6ƒ7_rxxÈ¿øíÉ|:…ÞmZÒ4åÝ»wx�KÕÔ´Bsrv‚z(Žܧi+ZWóòäYZp¹œãö"ÊeŠëùQB•Û·ŸØÄPSæv'!ƒÈG´¯­ºF9Ý¿Ÿýý}öB—‹‹ ‹9…RqƒBÿ..ºª©X®ÜK ÚòÆ|®GÛí»žÖv¬¨E�úý²Ù̺_T\õ¢ÍØÇÌŽLW†Ýþ·÷Zà9>WÅá@Çc—®°H@WJ[—K)›¸ž¯8ž…IL¿Ñ4ªÅ”%WWW$IŸ¦Ué2™Îéõz,WJ)Ц¤'äYI™”Qç§§o™O/9<ÜçÞÁ>B€Ò%ËÕ c Qè3E,Ӝӷïî�öú›DË<+ɳ’¦QxAH**вáí›3«†á,§,jÒUI¯7èª#§TU…VpGQÄÞx̳ÇhUÍäâ‚*[Q–9«yEøøž…œK)Á8(USgU©h´� ýìï>Áhµ¢5 ý¥¥å·«[¢²î»ªm<�Á`ÄÁÁe•cŒ¢Èr­ZéÒëõؘܻwç(e(ŠÒ¢zQôáHWrr~�¸´FÓ€_¬&Ð{P†HÇ¡­[ê²ÞÐ웦¥È2h²Å’a¿‡j*^¿ú‚{ñìÙ3® Î./øé§?çűJ3ÚÆðòóWüáÿýÇüä¯ÿڲ̖´mËÁÞ>«lÉ÷¾ÿ=fé‚ÃûG¬ò”Á`Àùå%Fh´Ò Ž>bðÑÅr|†£ÊhjÕ’ç9ªiéõ¢(! <<Ïc±Xàû#T£‰£yY`Œ!�޹|Hà9 † ㈓wgä�f•e8�f8 18¤EIØjáâJ‡ªl(k…nZƒª¤ã>�É;×UC–e4M…Ò-®ëÒ H’ßq(TCSÛÏ×JbúZïæ�Fè-7Ò–ðtgƒ’Z¬RÒLúö¾|WíÖ³Ù¤Al,bÓ^Ÿ³‰\¬ÿõ6Ýöc®ÝtÛ ¸»V‰Ä–up:ž0#4hc(³q‰ê­�øöøïŠ­×£Ý*ÊvWûúDTIÓÔïùn]rÂ}oÿïSrÛ±¯ë1« I«-îØùÞ°�Ìæïûâ}ëë-³{Õ¾çZ`ÊŽb¹K§ ®-áXi‹b$e½9mT”L’¸Þäl†ÑÅ�L·>Ú\\ʲ¤¬RÂ0$=Œ¶Å"‹4#Š"‚ è’8²¼Ä“.q/±¿/¥)ê’ÁhÄÑQL÷˜Í|úé§ßGz.£á˜¦ÊlùZBÏ!¯5ª®ØÛëÑ4 /?ûœ¦*è÷Ã1mÛ’—RÂ"�P¹Í-3!C]æÔeÅb:§-j’$& C›ú`‰çQB¯ç±·E³®�,]†£1‹ÅŠV�p<|7Ä“ÕX7æ:w¦ÈrÒå’ÕjEUæÔuIðø!ÇÇÇhÕÒ6†¶­É²œå²¢Å±À‰(a±œCG Õ6´ÁÅ‚KGà¡õ�HÓßÝ8¦Æsªª¢*ç„~À¨@ U^R·š£Ã}¾zýš¶ªØ;اikVË+ƃû|ïW¿‡jJª*ãóÏ¿ ‡Ü]háv{o9†o}ã9�>Æ1�ç³7ñöõWŒz1/?ùé|J6›Ñd³ËË®^xC«[ί.©µâj1ç»ßÿ—‹)ú'ŽÒ‚Ç�ž±\d¼þê-Q”ЋûÌ— F£A2ö “€Á ÇÉÙ)Žkˆ¢ÓBèGì�öù«¿ü+$’ÉdÂáá!uU1�¹¼¼ é÷‘žG2X”’Ö\'!ËJë«VŠ0ðèÇérNUä ò¢$/+„áúEÙ°LKвêª*üКÙyQ"�Ù|ÉÕdŽÒ†^o€Ñ–È5|¤p¨ŠÌfv c+¦ªš °JJ›–¶©»6€#F8(G ‘ ,ÔÓ‘#ÖÔú–+K›G¦�Ñ £µ}m R¬•�Øb»1¢µÐ»Ö!ëÏ„èøÙÖ;õÎÕ¶‰io[�ÂÛ(:˜¹¶ZP:ÒRéË55ÿºÄ„ÍuÁtÐõVuJ×–tضb6–•ÓÅœDWŽBÊë’;㲈*« ××[¿Þýï±y½>Æq$׌Ôko‰”ÖíjKD;Vx6Ç9ÝgÊØ<¨õ:nØÀ�Í�qˡљ„±¯o $Žãv97kh¼½OÖ›û%:¥Õ´ Ž#ô‡è®¬³ý§¯ó®ºgB+ÛŸe"wPÚ ”ÞÇGp”æë§ 8 ,°ÀHWRU�ïÑ6޾'‰¢€ªª‰Â˜ÉìeÊŽm¿a6›Å!USáù¯ß¼!Í êªFvPlÏ XÌsÏ–ó®kË ùÙgŸÓÔ5ý¤Gž.¨«‚<[ÒTïððáÃ$D5±ç#�'�ã¹ççôû}›Ð,–s.§çÔMEǾ�Dà —Ð�˜L4�ÂÁ!Ž\éQU ÂHzÉ�¦QøaLY¶¼zý–Åb‰�—“ eÝPÖ†Áð€å2ëÖ<éòüÙ3Ê<Ç•IQUIóáGóìùsÇ"vGÃ1ïN'¤iÅjU‘–-2H(ʆÉteˇ+Ë“çÉ€Hz˜¦ÁÅp<°Ÿ|øô!OÜãñÃ{Ä¡¤ŸøžâüÝ—„¾f4ôIBA]fR²šOÙìáhƒçJ-èÖVg¥¥ª+„Ñ„ž‹ï{œ¾~ÃW_^Pd+Æ£ãX9†_|HÆôã>Aà1[Îøø·‡/>ý„ï|ó[üùü3Žö÷)ÓŒýèG”UÅO~ò¾ýÝïòù_òìÛßæåë×øÿéÏðƒ�ÓwÊJƒã1�-9<~ÀlrÅÉÛ3>úø¾zûŠÑþýá­`¶XÙ¤,ò¼Ä´P–5y^²\¦¤Yz×€.ðßðîüŒ0 iÔÃá#%�Ÿ`TG‘©­0më†<[Qå`wø�jÉ‹†ó«+²²%«k öǽZΉã¥,oSÝ4$½ˆ0ì1Œ˜œŸ‘Ç%ž”è¶sµ9‚ °¦¯àúÞfç^–%ëM·ÄP7¶€œBJ´ÂqBâ`º¹gÞuål[.›ÏÄ5ÂIm»}Ü×¹Œ¶]YMcKjË5´¶j`7ޱilòBþ>ª¯ rj òŽù©¶ÛIïÆrÖ߯+�nÍá}1—»Ü�»ÇÞZ_!×:ëÆ¯ë8qãüís�ӹΜ�±w×]'¦®!ùp wÐkœZ'Ån»ë,\ù®¶ýÌ–Wôâƒ~ŸVß]Wtn¾] vݔѬ-%NgÅzJ5 ¹ë‚°Ï[ÅÈ.•¡ªK¤h݇ ËÕ‚Ów¯Ñƺó׿§Å|E–e€C])<Ïe–æáCäSL—ŒúC.Ï/)z®+‰¢„AÒco8b4ðàñË9u]óèÑÆã±-sú¼xòO,g³ùŠ(JHâ>uÝ"}I‘æ =â¾OxxŽ$]­¨‹ ×ñp„ËG¼ j<ǵÞcЩ¥+«›)qÔçÍëViIÛ*â¸ƱT8Ã1ïÞ]Q–¥­5äLS“$¡-!#4Ëù‡ÖºäöFh­9?‡”’{÷ï39›¢´Àóc<åbj[`Îh Ò¥?Øç§ªÑªÅ8‚À•ô’˜ÃqŸã½{ã¾­œlZ"_‚ë�ô<çÒµl!¾t9Üã91ï¦~Œç:Ì ¾õÑ ´€¯Þ¼âå«/1­! †ýËÙœ~¿Ï½ã>ÇÇÇw>cwµ÷* c {{{|ôâ#<Ïãäì ?ÿ»Ÿâº.³ÙŒßú­ß£yôà!ðÀñ½ûüÊ�ßÿÃÿ‡Zkúƒ=ÊZ!�¿úÉß‚ãry5ãðè�6øBrp|„”’‹É%ûGÔÚ€�äeEm\?B˜–VYáí9^"=‹÷o L6ÁÌÖ~·1šÃÁˆñž%ç;;;C·+GÇvïJ|éƒQdENš®hÛ–FY8ešZh$BùeÝ’¦K†ƒU•¡L‹F'!Æ(ª¦¡?ÜÃ�B‹Þq]Ô–¬u]7ð)r›(绾ïZ$œcЭg½qîÐq±Ö)Öá®Û®2¹]èfpyGžl¾[ÿ]+�í¼¡í϶ƒÝ×}Þì*°»Übëïv…þûÎÛ�Ï]sØœÛ!ð}± †ÛsßuÕmÇTÞØm·×ùöqZ¯K“[‹Èql5»9¸æ·Ûþ¿«€¤¸æÒ»9÷ÝØÞu~ÑzLuSq1}Gà[´¦Òí­¾èz2¢+Ä',ûöÚÝ'»B‚«(`œè½7È Ò~B¶À /QªÅu\²<µÏŽ2´JsquÆ*Ë0ÆØºZ¸T•¡(rúý=ÚFãÈU¥Y.k¢HÐëÅhU‘•®ï‚úÿ£ýÇq(Š ?pyôà>išâºÙrÅxoº¥mkЖ^ìôÝ[>xL�X`C „îâ3+VŽ&ò¤°I™¡Ÿ 1ÄŽÍÛ±ðê‰ïÄqáø¼zõéÇuÓ¶8¾K•7œ®¾"ïQV+ÂÀC·E±d<ö‘žÆ•’*Ï)« ­\©¬ 2]"=·cýxž…g+áád5Južy‘Ùߦnñ\‡0 ð„!Ž|‚Ð%î‘OS+¤ë2FdÕŠ²hŽGÒ ÑºÅ½ ÆuCмŕ^à³H„‘OGHï‡÷ŽQª%Œ#†ãq/Áq`0ì1�¸8ýÆ€~í×~ƒÀ� ÆÌS¾ùž‰§ IDATÑÇ$QÈ|:ãêrbsp=ð=&ËýÒ?¢1¯NOpƒ„ZC¯?擟¿äïþîS\“€ÑT­Âõ<Œq88>d4ÚãõëWOòå«×¼xóŽþ8¡6 Ê(p ÃaŸùdŽïºsÿþýMй¨J|×ò+“P%UU‘¦9A‘ež0�Ï-�¡çàÉÝÖ”¥U8Uc©Ï×Xü¶m ûQÂd±`:]1EÌsÚ.µ¿?f¹\ruu‰ëv?<ŒE ¹rÃNmŒ¡--)aQU4uËÀIlyg­»]Hé�é*¦ëj³åŸ[´GØí÷®`\ þurë]%vwþ7„Î}—¶g·vк¯»þë×ÛJçNÁ¼SÆ`“�³eIl·ÝŠ¢›ñîŒûÚÒºf¡ÐZã»Þ�þv•Û¶Åp— Oµ7Ñr»VÖ]ùD×÷H ·btëã-JÏ~¶®g¤º<©õFdíÊtåm%e¯uwA¼í1XÔØ’ó«3î>Äõ\´Q7À¦ ³~usC°îÑ) ŽŒ«†óÑa MÝZ÷žÒ`F Ê¢æçŸJV®®é-´� ޶j¨vˆÂ€º:azµ$Ër´š0½Ê�|_±·?Ä5.¾t¹¸8ã[ßúÆ&¦>UUš0 ñ\‡l•R—£ÑÙ²@£�Ò!Í–82À÷}ŠºÀóú½˜ª*)Ë”ºj»Mªo‘±mÍ*Ÿá…á\׺t•®X\.¸šÍñü˜Äw©ƒQŠ¢V Æ<ûÇÏ{ Wó+¾øâ% ]M!*0 ªÉˆ#W„‘Ož6›Mq…D‰j82 m Z7T®�Ò>'„0xžÄõÂÀe�Ä„ž-ÎÙöÀÕ(ÓPT%n¸Y^“çK´£¨Û?°%d´‘8´4´ %�jø•_ýç“ ¾zm-ØáxŒô¯-#ö|1µ›÷ë½Ûí½ èg÷ M£$=ªªb8ˆùþ~™ÅpDQd|úé§¡‡v]~÷ü×\^ÍøòåKܨG¥ Qo�«é’Ë«9YÖÐÖsøÃ?þcÞœ�1HLç3š¢$ŽCŽîÑ�Fă1žªYeKZÓ"dÀó>äìô_¼zÍl±"+*4ÏiÚ.k8Líïáú!i^r1™â9.ýdD?Xßschª‚¢LY¬–8"'èjqdEicŽC„T] ÇP%WÓ×÷hš†¼,˜ÎgDAˆÖKTáI‰0- Š&/Ø?:d¶)Ó`-£µ£Å÷”脊Xó¹©k¥#®EÂn÷ÿ®ðÞ¶€îºÛçmC—ïjï ¨ßõùvÿ·Æ¤o[P7bI;m›Yh‚7×…í䃀¢ƒˆƒP×–ÛÝÜö³‹¢[÷³±ï¨´Ýîʺ>÷n¦ër³Ç¯Ýɘî^¬¯¿Á œLbsgn0�Z7íö&`½VFukóى˽£×Jh³¨×ˆ5/»NBî°Žh­¹òžbp„å§Ô5RªªÆó$eU…¶�Yõ©ë†Éì‚«å¼Ëé m>L£)ë”0ˆÂðöí)÷Žp~9e1_Ç=ʦ³)£qB¨ÚIÉÓ§OiMKQ|úòS\Ç!IbÒå ׳îò‹³sÆÃŽ0ì�‡8B0™/–ŒÇC®¦ ”ZòøñcŠº އh½^�A?¡.+V«Œù"%l¼CHAº–ö¦ip�Çæí”M�À¥,2´ðxøð>óeNÕ•.Ø B8»xE¹Sæ}BÏÑ­kŠ2Å‘‰Ý¬MÝ”h£‰¢WFÌkEQ¶UA£Zšº%H –ÖHJ�pªm)Ë’À3ø~„ßY?Qì¡…"k2$ŠÆ@ZVT�Æó\&W+�Æ4ZS5)uQa´À“ YVpp|ˆë:¡OYæeµ}2‚8 Îjfó)®ë’ù­gý}í½ „ÿâ;ßæòrÂÛ7o¹¸8Çè–«ËKƒ!_~õŠ£ãc>{ù%nòöü /‰Yæ_¼9Á�û<~ö!yÙrrrAQ·]ßprrÊjµ¤(*|ß'CÞžž¢œž¾#-3f‹½~ŸÃãûŒöö�ŸšL.ùꫯ˜Íf„aÈ`0°þX­ŽÇ–ÊÝõ0@YT,—+Š¢$Núm,0@J‹)‹å’t™²\-Ž ¬*ÜÀŽÇó}üÐÇ•×uéõbÂ8äàpŸ( ™L®˜Ng6ù­ÑIÒ½Û×î†`míÙ[{íN]³l[F›û´ùÛÁ¬Í7±V�×Ï‚”¨r§âÞ(*»eUlÊøžƒ3Ð>'×swœk…ìʉÔBpœ•¸º3(Í¥µgã•UUázBHÚ¶årrÆ|uDÌç+ò¼¤,›ÏRµ€$Ï*´‚ yû攪ªðýc4EY'>E>G›šÇ�qòî-Fk²<%‰"¢( M—ôû ðòå§€! #¢0äâü /´¬J[ ˆëºyQòùç/ùàƒ�ȳî?"ˆ#T¥¸œL™Ï,9ÏŸ<'Šl"[Zä”YNÛÔ¤yŽ Ò÷ð}ŸÁ`€2†ºQHÙ"Üá ¢(`8“g'§”E‹Ö‚¶…º�"ô@IA‘7(ÝàȈÙdÂþሽC[•ÕæTY�¡švS)Tˆ­@ºÐ$Z@Ýî Í¸)ì·…üÝ»ý÷ØÁæ}­-�uFöºŸ»Üh»Jfw<»‚x~½¶è¶Û.ˆáÖ8Ͱ ûýÞlb7b)Ýu¥¾=‡›.Ãn|뜋 ƒÛçìŽó.%¼>^ÛòH¶Ê«±ÖÐÚµ¶fBX[`kÂÚZ+";¬›q° 6!¬ ts\jk:¯ÌWS”n8Ø;¦ßXtÚZY¢«|+@:!¬â‘ŽÒ"Ó$"Z(¥QJ“¬2–aˆ4à{!ÂHæó9“Ù9U]PU5çç_~ù¯Ë?Ùß�hƒ”1–IJ*-vÜëê…bá�WsêzE<Øc•§äy Z0ɲaär||HQdTeÉ“‡�ˆã˜tµdµ\ʼnͽ1ÖR8>>d:_1[.(Ë’4[ðàÁ=ªª ¨*¤ãV¡–ecpí’á(¶¿]ÇZxóùœå*e>_ò½_ù>£qƒÃ|9åâò„¢ÌÙÛ?¢ÉZªŽ=¡©:޾�Eà #)Š‚h4²¿Q× =×8ĉÄsCfÓ×­ijÓååXË^k�AỂh0âøø�½ñ€^ЋB\ÏÁw]†ýˆÉdNUWh­nÉV%Ë4C)Ã2]áÞ;äjšòúí)u™S¶*ìHŒé z:Fë–«««<#JbÂ8 í€3Ž´�ýV+¦óGý_ŒŽç½�ëú¸Ò¥i Yž1ŸNùÎ/}›§ÏŸó7?ý[zÃ1 ˜-–4´�¸AŸüǃðQÊá/þò'Ü»÷?Œ‘ޤ?G YžS–Ÿ~ú9¯_¿ÂÍäj‚1P·5Y–’f9/¿xÉl6g9_�­æ }fÓ)Yž[¨sr|ï®çÓK...ÁÀ|¾`zuÅééKÝxpÈxLø¤iFÓÖ(Õ’wAуÃ}ë+_®Xe+ÚV¡•B©á´R¤YNà‡Ö¢R‚¼(i‹ Ç ˜Ï–¤Y�cm‡ì©Ê´�“z´íb»¥»óZÕn,)¹¾&77 tc�ëR®‹']¤#ïÏûQ†Û›Œ5<Û–Àš¶!/RÚ¶Á“a!«È­rtp¤»µ6]>‰ëã»’½¬Ü\Æ‚·ž‡ëz´� ô_Í.™L.ƒ�ºihÚˆùlI&ø¾Í¡99=a>_pqqÎdrÉéé[â$àW¿ÿ]<<àão<åß|Á`E>£ñ€¶møø£�¨«’£ã¾xù9Ožûô„cã�e¿8¿´Öo«X-W¸ŽÇb±ä«/_†1aØc¹Èxóú”ªQÄa�Ūâäí%'§gü!Õ ¥Cz$½ˆçÏŸrÿÁãqÏ—¶à£²1tÏ—�eYHÓ‚UVq~qÅ2-,Ø nX-—dEÊÕÕqã‡ãÑ�0J»9½šNY¬–ô‡i�"/-£ÅùùUeÓ\¢(Ä5Ñ?Ì‘¤y‰”ucPÆÅß¼9áÉÓçÌV)³åŠ·§'MËl™q~1Eàr~1Áè9ž1Ÿ¿A¸ÓÖöo`ð¤ý¡eEAxøAÀb±è‚|.EQàûËù)À—‚ÅbaYƒÛ¶³¦ Msî=xÀüjÎ`0â³Ï^òá‡Ò¶šÃý#f“+ÙX_0¶�~¿�+_|1¡n‚(´ÊÃq¸ººâìò‚8I Féàè–ºm “˜ªl˜Îæ$I}:íPWÚÖª’étIYÖ¨º¡nJê(¤¨Wì�0FÙ�1ÄqLèûHGâ¹’¦¬ð¼°IµmGëHÀtB±Ìk»­ÖBp-×߯Û×Ål„Ôu}£ïº®7ýcë«l_nÆm¶)v¶…áöñבÐ6GšêX¡·€èêͯUæš!›µÂé¨üÕúø‹o{|Ûk±þüë‚øëyl»%w]‘íV‰Ð[q¬Îú‘R"ÅM¡éèYÖnÏ�UÜ)P›K%ql\’Ž–›J>ð,s‰Ö­½gÚÐÔ\>žë“e¾o‹ú•e‰Q-3]3›ŸóðÞz½!Ž�8®Ç|>'| '¶þK”2„IÀÊØ<µJ Ï¡u$´Š³ó3æË—gÄqŒãÊ küp8 Ë Š¢âèÈÇq\‹È’! Âiø'ÿì7û”ÕŠA/ mK²|ÉÃÇc’DÒï÷YLg¬V \Ïa2™0 X̦6Õ [³¶m9:< )+›îàzYÆ2¯ðÜ�¼*;äá5I’$ö| FHzƒ>§'—œŸ½æÉÓG G¤Ù’¢ÌŽ`<ìy Ž©)ŠÊ–0@(~þÉßòèñZ4|úùhî=fµ,À¸œ½›°Z¤žOîV„á€(i�^Ìt–ѶÇí±X”äé;..gT%qBÛ6HÇÐ$¤é/<~ü�<¥ª2²lÅÛ·¯IWK‚Àãðð�á·?¶lâmÃt1g2I©K‰Æ£(gh ŽÐ,Ò¤ÏäjŽç[äëý‡OÉòœt±ìÈbmèc±X&6x™¥×CzqÛ_é/‚{?ÁõB„ãY~3)ÉŠŠ‹Ë+ŽãôôŒüÊðȺQLfK¾”o©]CÒ‘f�¥�{ÌZkŘÕ¥�AhêšÆ´ø®à“OÊþþ˜À÷Øß3�˜Ïçœ��qÿÞ‡ûC‚À'ÏsZ£Y¦+Â(«@ÆÃ¡}Ø•%Õ{üø1ù*åÞñ1I“­R´±¤‡Ó«+ŒQŒÇcÞf)³…­‘Ñ*…¸¸þné eH­,ÂNkCc”­¿,­â𲢄®Ò£”¶l¾ã=>|ñœÃûc‚X"œ–²¨p«¨Y¶êòìlõKq9ãðo~ŠZ-ÑJ‡gLJ¸Þ„ƒƒƒÎ¹¯ñs´V¼ù*Åuãá€ã£=Þ¾}‹+\Ïáàà˜~?¶EÞš‚¶)©+�#JÔM†n�8Šp Ô®‡ršªåâbB[7V8 K÷³\¦H×à `¹L9»œ ´¡i U­‰‚ÈΧyXØs€�’““”X, +§”àó/ÞÐÖ%Óùœ÷�8}wÁx¯GšÝ»OÓTäeÅaÀØ ¸èJy?yò„Ūìº5HGP5Öêp„ Õ’Þ`Ÿ¦ihuC£%•²gU¶hcãdÊhp,:Vi�ﻌ†=Fĺ.™\œE‘-Òç8\\\Å ½^ÌñqÌäâ’óós”’Œ÷öY, ²¬$ˆÚZ÷"”ÆÆªJ—t•óóŸ}Îó§O©ÊÖ²bG1骠©5UÝàx.AäÚ›6¬R»éˆãþ×þÖí½ H!4­ýÑx>/_}EYÿ>W>ûì3’(¡'HéâK`(yxï>õëš²B)ƒj4FØü ‰@iaK3›í¨, �R ÇÇOlÒ¥H¡ô#B÷>Üçüì„0²ZUº>h›áß(Ežw9?«”l•3 ùGßþçç–‹Ì(æÓ)£Ñ€ñ`È»wï�Òe<3™\²ÊR–Ltÿ`LÇ4mË*Ϩ뚳³3ZÃt¾´0~éÒd%iš¡[MÓ4ÄqDÚrîišÒ´ðæä 1xÁ×u™Îì��Zrt|Ÿ“Ó/ñBÉ|‘1ÜF ï.Îé ö¨›–£{ùòõÿËáÑ#.Χ4µF+ß&EÂ`�(û£ýnãàÑjÅådÎ2KW8\Í®pAù¸ž $ƒaÂã'÷yúô1oÞ|EÓÖ”ó‚0ˆhe=Q�-…}†Ã�?¡ÈrÚ¶µåÐe†Ö-oÞ¼é6{Ö3T _-Nðý‡–ù"£ª5gSüÐ#Lúh éªàââ‚8Ž­e÷wö]í½ „¬Ár a}«‡GûÜ¿wÌ£‡�ùô“ŸóàÁh5MÕbZc9’˜ÉÅ‹åŠÀ�QÚft»žgË»jEÛ4€Æ–·,HBÆ|ðÁ3òlI¸®K–-p„¡‡¸ÿ?ioú$G’žùý<<³…«Ñ=#9×jÉå’\ÙšLfÒýµüº+“L+™ÖH�YNÏÙÓh…ByÇîúà‘Y€áÈ&`iȪʈôˆÌxÏç}êªÀ“N?•`Øì6x¾m|Ú,Ír¬5u�ç8<}ü„o¿ù†ëW )Góy¯1â±Ûnñz‰‰ívCœ$¤iB…aÒ:„(‰Ž$qÌâú’(  ‡¸R²Ûnh[E§M[â¹é€Ñ5Irr4æÑéŒA±ËºÞ±ö˜$á Z…î:K÷áØ±-³YýcldÖ¨¥µU–”÷›ô îC£·7lªû^|wÿ‡Lw Ü–àîûSÿnû¨„Ç}gqȼïþùCEì®sœ!n8[÷±S¾›Í}Î!ßþüñõ»ûøÔµ9ì+ì0*B@Ôc®Ø÷�öGÙ—…#zpÊ­³Ú ö|íÜι'!óùì`Œ]×% :e‡0[U÷eqGÂ`0$Ž-Ý¿î,¹ªjÁhaáËm‹Vš"+¤Cr×ãû®h«­;Çá7£”•jRÐu–XJIÝ”ÏgÄ‘Ëh�àˆŽG§G ÒÏ•\]^’g[TÛÐ6-ƒ'= p�ž�ß+4ZÊ¢d½Z# Òi2#ˆã„ªªÉrËëèz>ºÓQ’Òt?LFà—¶iÙlÖ(ÕÒõ2-E‘S×-Y^à…1Ò QÔmƒ†(ò9>�#]ÁìhJ^ä Ò„áx„ÁáíÛ Ö«y^3ÌøÍoÞÐ6‚«Åœ#œƒÄ¾ªÐ´Š¦®ŽËv—YpHÕ�å%EYѶ ? PM…ôq2§Ìçcž9ž2ˆCi�¼zõ‚0ºäââ’ J˜ÏçV(òyúôWÂ.[!DƒçcgŠ#,Ós]<ß³‘6ÒÎ-bËÖÛ­Qs]ß*r:÷ ö³#ð1Û]'òQ¶ß~}ÌÃ>ÏÃ,á5Üûí.ßÜ!Ù¼³–ßÛ_êG�„ùt¶õ°grÈ4Nõ÷¯ï÷ewûãì÷)ý¯m‡ÜÇjŸÜßqúx¸\)úaZzj$awV�Æ¨Ž¼Ê­4t[±Y®¬RñA$ÑòÍÅqÌllYã—7Wl×7ýÜÛ˜ÍzG)$ºsi«–NÁâꚦ±ß‘åõI’ð£ýˆ7oÞ1=šó:ø3)­p²Ùâ"Tç¥É f:Ó[›­ ¤e¾µªÊnÀW¯¾äõë7¶¥:D`”G§¦uÈEC´•Õór| Ú)Šúówü�Á Äu}”Ò4m‹t}\/ + ¤ã±ÞmhkE’ ˆ;Óãû.ËÕ5¾ï3�ñ‚mÞ¾»"IäEG…Ÿ yzfµÉF£„ª®À(®®®lßNKšºÃuCT#8{ƒVM¥ð"Ÿ¦-Q¢³3~ûï‘kËkÆtöÜ�Bz¡eÎð%¾ëS5–BȤíõ©®e·Û°Ý† ìsß÷I’„ÑhÄõõŠ 2MNˆëDQÂfe/^„8nHU5x¾oÁn‚ã8EÆW_}Ån�ñÏÿô5ª6ı¡ÃÎn·™®ì ®¯dyF:ât¦GajŠ¢‚év_|Öe™Õãq£/ž=ç‹gOxúè1q°¼Yà"ˆ¢˜ívKœ ¸YYœ¸ã…‡™’Qbazhp\˃$Ý¡:u('dYÆË—_ µæýûsòÝŽ7o/QZ“Æ1ùw ‡C;°VвÅÉkâ¼Äu£Éß ˜3Œ™�¦D~@™äùŽt8 ,Kêº&JbF£óãc®×”uKHÏ'0š0´Ø÷¦­ }œ !@«ŠédÄt¡,J;Ïá¶< 4Žt‘¾G§EÑEÖ°t}äzP£õ$ŽsË3·wP¿f½�’5 ´E=tPwËû&øþïŸ6¬;Ÿÿ?è. Nk} Òù¨Ä·oK€gõR„mÀßu>ޱº@{8¶ê¹÷ö7·Þ—õúv“‡Ú'Ïïnæø1*Ðêò|nŸÍ9»/É îîg´¥RX²M#°Hl¯ƒ°ÍLèŸ §¿~t¶ïù¤ƒøp?%I‚TyÁr³Æ©Z: YVPµ-qàJËF°Yï †ceÂ0Äq|\×¥ª¬6ŽR6H{ùò%×××8üÎsø¡°R!Útœ•5_þðû_RU%¿øåÏéTC×uŒÇcÚ¶e»Ý1Œ) rÚÔGG'L§S–Ë%mkÕ�“0µÓþBàÊ€››š¦±Õ‡ÜJY»žCÇÖðµ Yž†1/_¾¤ª*š¦¡í÷ñ¼†<Ë(w%i3 %ÂÈ#Û®8™Ï¢ˆ¢ªH“�gOñøÉs¾þÅ7,®/©†]WðòÅs.ß¿g<ðõ×_ãI—2¯ˆû~Ó‹ç_�— ¥jªª#ª:Ç•WöŸê°x,A×£3à 8 óª´eUÂÈ¢ÔTU…!£q‚šªÎ(òˆá $ö{Í&Ч››5ÃÁ€HºtÔ» è3~ò“Ÿ0ŸóÏ?ûš«ËÎ=&LlEëñécæó9×××èVÛßÐCFu]2–uÛp½XrttÄd2c»Í@A�íx‰ÖøRÒVx`öÙÜͶ& #¤°MöÿÓŸðïúS[ó­j0M]1ž�Ùä9nPªŽ¬jX¬6¬³?ˆñ¼�B8h,•ÊžŒ2Š"ZÕàH�ãôý†^÷Gkm©6´åy:<îd ºw2Ú˜W˜îQ3w ¼è£æ[¿±R¼EÒu�ý�ëÚþX"M¯×ñq¥“vjÑö«ºÎÍ �#ì½À`OÞ>üÐÊB£-™Ñ‡×Øò^ßÍé¶úFý±„cu„„sÐê±ÿ÷%¬}†‡í¯EaHš¤èN£êéºö}{}Ý?7{ïäÜ>„mÒ��¦3ÚÜ~öF©–¶m0\ÏE8{bJ«éãºÞ¡<¶Ï<<ÏÕÓ龿áâJ;ܬuB'V¾@µ ¾ëø>–AÈò¼¹Ž&M#”ª�´mc”…Á‘Ží]:°X.h»–¢,X®—–Ð2N¨›ŽFuTUKÕ(ÀA�çGøALUw,W‚§OŸ‘ç9»Ý†t£T�#%¾ï†(ޤ™Ñ|ïfmƒ”¦©ÉžžRGŽ0 ÞŸ¿#/ ʼÂ÷bt'�ŽX^­ùðþŠ®µ}áÐ÷�´M‰ç Žfs[R,*&ã U™Ó¨š,ÛFªiR–‹ª®ñ¤¤È2’4aq}EèlÖk¦ã)Ú¤´õÑé .�&1Ò�8Šé”²=:­ñ¤Õ/ò8=™z†ë˷̆ >0 (³Œ¦¬ˆ¼ÈfXÍ wïÎ-O:ÄQHQlÉv+âX"ÉIˆ}‰Ð ºéXÔ¦0àJÈ‹Œ0  SvÙ–"ßÇÚò² ßm0ºe:NytrDêûtMC(}DÓ1baÄûï^ãÑñ?ÿ�ÿ�Ÿüè<=;åìì Òqøöõ·¨Vqñþœ}°ÿòÅ <×%ôCÒ8Æs]‹K�Ÿ3ž¸¸¼äfqÃb¹b½Þ±]ç  (5RøŒ‡G˜N œÌ“?®ôíûKÚºB‡$X^œSl7tª!Ë,*¦n*.o®Ù9oÎϹÙlXír„ëâ¸�6€ƒ�Óº³Z$ŽžËl2e:ƒ1\_/X¯·ø^ÄÅÕ ëmIÕhÊZ£zFÝ,+Yïr²¢dµÝ!]—®34ukE½ŒàË/¾À‘2�¹¹¶éuUWÈÀ¥èiÝ×Û-ÿð�ÿ@V䬶ëC EI°Ûm-»vUZã*%~/k¸.ž+qÐÓa´BôÆŠƒ#°Tü�6hÇf0]OkâH«²i vÒXÛ&1«Aßu‡lHu Ù3ÜöDî#¢÷©f´4Ðg÷?äÛèýa6t›AíW×é)æÃLi?·s›Í| t°ÙØÇðñ‡=¨‡ WJ<ÏÃó=¤ãZuG!¢swó/Oº´˜ëº®g!ÿZã¹î�âæ÷m¿/£ëºö�]Üåá»Ë¤`�x(•vVÕ—C¶iï §–”eŽ”i:Àõ$uÝЩ�@©WB«j6›5º³éAàc0ìv;–Ë%Ó©¥®ªëáH†ÃQœ°ÛíˆâGH²,§®j¤ô8::¡.¾ýÝk’$e8²YYEÎ( ñ}�ápÀ_¼äÙ³3Ëúîy¸® MV›ÉfË©6„A€î:Öüª­@X8ïjµf½\²ÝdŒFÒtDàÇTEMYÖAhÙ¨‡1I’g[QªØk5™ŽÉó-çoϹ¼ú€Ñ†$‰‘OJƒ”¦n FÜ,–L'Sʪ¢ªjÒAj)†€<ߢUGQd¨¶¡Èwd»Œ"Ï8šÏÀh¢Àc·]ã»V M8™Ïq= `xþ�ª¬hš)\ÛgZ,£˜¦©­Êj¾¥íjæ“”é(f>ûJÕhÕZž=£išÏõ £ÐÔjÕW: C�6EG³ Æ4¨¦$ßnH€AaZC† ¢”$ ‰ƒ€/¿xÆ¿û·?åÉÙ)ãÙ„wççüêW¿b·Ý0ŒXÜ\qùáÒJl ‡<Ïí «tÈ‹e™3�Ž˜ÍÆ¬7+Šª`·ËÉ–kêªÁõCÂ0ÅÁ¥,j¶ë eQ1�™Nü?®4 h›O:ŒÇCN¦CÛ5-Š››´VxžÇÛ÷çŒÆSvyAÓ ®Wp/îk—š(�ÐZQ¨Ö"ÀŒ¦Sš¶iXÞ¬Èw‚ ÀuC’dÀÅå ‘o1éž —Õ*Çs%USâH�ÀÃsš¶ ÊrÒ8"ŽÒ$€¶Cue-P¦¤í*p:GÓ¨’8èò†‹«s&“ uS0§lóMÓÇ!iœ�$®cça?»³GYÃÔš½ûYÞ)YiK¹³W—ôýé84¦ê#g‡Úhè£hÛ|¶7žînª?Å(°7ÖaÎw7ï–¶>F�í ìžl”ûÇéƒU±�%¨´§h‹ú}úý÷�»›îŒîŸ®÷³Gýµíçåö%ÄýñÎH}jû}e³‡=c Zi¤ã"¥‹è¥,Oœ>¬Ó:äýÏ÷�"mu|Ùk`3±}‰OJy(­î©�Â0¤m;..hå‘$1ÃÁ!¼žðÖó,«À`0BkhÛWúr\kä£Ãu BŸ²rxýÝ·¸žd<ñ½ïEÛØ~h]–}ÿQ3��çV×6ó*òЛńýN~zü Ê¨j ˜xZ6üÝd€1Ï p]ŸÝ.çÅÙèU‘Q5Ãáϳμ¬ É&æèä˜årÉj½f¹Úm°Û­1H¢dH¾¸¶¨±mFØ«¦ÖmCGte�ë:¨®!JBšÍ¥â(ÀqÆä»ŒlçàJ+Ò(tÇh��eUÓPU^ਨÂ0äÙÙS„‘ÌçsÏGJ¯G : Çc¢0á·¿ûö[ˆt C\?âìÉ3"TWÓÔ-Æø~N–—Ã(ÁhC­vëŒ2Ïñ‚aªª!Jìõ2ÆP%ÆtžíïEQ�Ȧhmg¥k‡Øß¾}Ë2ÛR·Í=Æ“½ôÌx2âßþô'ìv;®¯¯ùú¿ýŒ×WDQÄÉÉ 999Á÷CŒ2,5tJØ,^+ZÕgÿ¾‹RŠõf$Ÿ½¿înŸÍ€.+æÓ)ßÿþWüäÇ?d4ˆùpuÉf»f³Û‘ŽÌŽlDðôùs¾÷ƒ0žÍ)ªš¢nlI�qºNáhC]– “„“£9a¯‡ã a™_ÛŽã£cfÓ9Y^`Œƒ#=!ñ¼­ Bº=„Yà{)ã A…<:žó“ýI.ª­Y­—ŒgcOP·8XZ}Õ²Ú®ð j˜Î¦aj�V}–b«1®øÒÁí¹ØÜ^TLk�j[Ú¶½�ËÙ“Dö†Ùì�¡´‘»ÄEÏ‘=(ÃF•¶ Ù“†Â¡ èüï:mîg݃ â¡y= ¯4ç?æB»�ð÷ý¦}ùîS½ŸýSϳ¥'GŠ{eoTRÌsÈ,îÎ7í_£�¡iÔ=ÐÅízû™©;È/°ÑÝŸï^�?NþQO�ÛÙ«ûYœÍÞöd®w쾯³çò³–zÆÐõ®]‹u6­�«ó}Gö �º®ØôT÷¾P×-Ž#Éó‚¦Õ\_Ý0™ÌmºÉð<ŸÁ`LS·yIà‡Ü,n=†££#~ûÛß²X,X-W´mK’&ENš¤¤iBYV=OÌbqƒR�ç;./?ʦ˶æ/Š¥¬ãL;ÍÏ�&àJ|ßg»Ù±Ýí�B“¤i:¢(sŒ,7HW2 ˆãˆ,ß1›MÉŠ‚¶ë¸¸¸"ŒS¤ëq}}Ål2#pSUÚÚºFàPUv&¯J‚( ë4qÁžKM–o)²ÌÎö%é0 ˜ŒÆH)جW¸žK¶Û1�hêš¶UÔUÍn»e—[ÄÜl:§ë4ah‰NWë ‰�–: £þ{'˜Ï¦„¾´ ,c�Æ„¾O«Z‚ÀãÑé ÃAÂ`0Àqì o§,Z/ôb¤ëqrrÌ£Ó×±p®äøxNèt�a6�1MH’„4Iˆ“ÐÂà=‡›å5ÿô/ÿL–gœŸ¿ç›o¾! BÂ0Âq$EQà8’ÅbÁb±`»Û :ÅÉÉ ãñ˜·oßP•%ïÞ½cµZẒ iE§�o[ a"]A]W<}2ûã2 ggOøâÅ ž=;ãÑé1o¿û†ÑdH¶<~zÆóçO “˜WJ‘FH?à´RÔF£~õ[nk„ÒdyA¬)y||Ä/Ÿ³¸üÀoýk*¡™ÍfŒÒO_<Çõª¦åÛ×ï¾OÝ´62«:;=ïzxŽ‹çBUfŒÒÏž>æùÓG<ò˜<ßb´©Á38�”mM'!J"Þž¿£jŽNŽ©ª‚ÆÄœ8çøøˆÉ‘Õ;ªK]ø>i˜Re9ºnéš‘Ø f×µÑuäý†´Cg‘~ZYR@áà>Fu¨ºÁqM�ð3v­œžQÁ8ö!¹/6ww»çtîdw_õ°±~nýÐð~Lª 6ÛÑ}Ÿæ�í�´y¿ôt·eŒ90<Ü q; tW\Ï–¯:ŒùDZug»›>Dî?“Ï]�‡¥·O! ]×A+eK’RZx³pìûyž… t]k¥8Œ]³='yˆöí{;ý\ÓþšY¬”žg?û,ÏɲŒ$ptt„V BHŠ¢¢©ƒtDàG(uÝòþüÂò«µ-e±¥ªí5­«–<¯™ÏÇl·[Þ¾}kÅÃz¤\[ÛaÔ®±óyâô1IõkR 5ƒ4Æ-Z³iRž>}‚1†õzÅ&Û±KRÆUkƒ�¢d|½dùä�Ãp8æøè„:_°\ÜеÐ)C4ÐumO»5äèôˆ«Å5‹õ’õfËv[àÏpjÍ‹çOIcÊ"'ŒDÉ¥:\ E‘áû¾-&– ¤,7ÌŽŽpPm…ïû:’ÈÇ÷\Çf�¾'ñ]É Iiªš*·t2Fk²ÝŽËWÌ's éx¼xþ¾!—W7´m‡#,ʰj• ¨{&ƒ,+¸¸¸àhœößéXñ½£>ÃŒ«xÚ*MùLÆC–‹-uÕ¢{±ÊñpÌñ|ÆÛ7–RGµ-gggM¦<>}DäG¸ŽGSÖt�²Jª–6›8¶¢vËå’‹‹K./—¸ÒŽ~DQ@�p}sÅõõ5/^4¿}ß¿ånÛ7ùï^aöÆw_ªéŽÍ :¥�p¹[°€ëº‡¡JãX@AÛÙþ�6úá?ìŒî]g±_ÇCºx¼kèþü©ÆÁ‹�³»Ý/õÝJ»×z°ï§ÐxðÐ9Þ¾ƒ”·= �ˈ¶Äx7{ò\÷àh¤”qÉ=ìQ=ìKݽ>BØYœ»ëtûßu÷²·NÏq@Jç0ßþAzÛé3k×uûï×Ù4 Û­UmêÖ6á«úAÀ(Š1ƉÚÁeIFxn@Ót\_ß�íJ¶›ŒËËk‹eau·„£É‹œÕjEUU¸RòâÅ ›¥l·´MÅ`0°C«]Çp8@kÍõõqryu�ï{$IÄ`0èÏI²Z¯™*ÍãÖ¦îÂq N¹šOQÊZ’dÀéñ˜¶Q,—kÚ¦ãôô1qœ’e9ôåÊd�„!a’ryµàÕ÷~Àz“SU¶ÿ–¦C›H þ¨›†ÉxBÇxÒCë�&Žcв¤ªJò2§i*l©Ô tG'–Æf˜…>i’Ræ9qq4?¢( ¦“éðsñá’"+‚�$ðüùsÎÏßcŒà_þåë>Ë!iU‡ïû4­: šê®C· Ã4%ŒŠ"§mkÒ4" <ª2Ç‚ª®l`ëøTEM‘WˆÎé{ÉŠ²Ìyÿî qðâù?þñ�Iãˆ(JhKt¼^oèÚ–N+Öë%W×—¼¿8§j[š¦áää”§OŸÐuš_þòW¤é€¿üË¿äÅ‹—4�Eú¾zõ’Ç�!CàÙ>à|:ãøô„$IQ}?t43�ðÏ÷S¢(`»ÝòèdúÇe@¶ädûÒwÉó’$IÐI‹R ›MÅ6Ûáyž-•9]×1JÍð]I­;I€Ð)^]òå‹3Îyg�� Ýÿž²,˜ÍfDQ@Ý8Ò%Š|Ò$äüýÒóÙî8]/t][“¤S¦©Ï³³G<{ô„¶Ìhµ ­BÛh"+·\/VtN�“í2nVk6ÛáØèÄ÷}:ípöô9­ªQ­¶€žK×j6Û ºî˜$#´iûæ¸�t<u ½íYè­£u¯Tiˆ<ŸN«ýƒ°¼o�F^�œÒ­-e€¥¤iz8¶�›ú¸‡s×TrûDIé¡á¿ûÿC‡°ÿýþ¼”ng6ýh¨è¥zÉiÑÿÌÞéÙ—XùñO¬goø®çîºÎK˜y÷1üÙh�ëJ¼žlqS¶Y¸CS·ûW~TN´ïoÿv»¶{WÓÄ}Þ=¥BﳸýH�@ˆ[GãH{ ¥o×Õé£9”mFÕz4–ñ]s|tŠçyd™¥MñÉ`àØhÛ‘,—+á¥|?$Mà—‹ßÐ4=6á•0â0Á•uY±Ùl×ux|rÌÉ|Æjµb4�u|ýpfU”eÀr¹Àó\¢(²Á€0œœqquÉß¿¿ä§Â„úÒåQVð_«Ž¢ØYÉ‚ÐRS>úƒtËÍõš7oÞáIY7<ù¿úͯ˜Ì'ÌçÇl¯®Q�ÃÍÍ–õ¦@‡o_¿g� -ÃólÂn»¤ªT«q¤¤jr´€®i¬�Òa°X[‡; iãßóˆ‚�"Ë0��+öóˆ�ïöL%÷ƒ¨(è”%,�Íæüö·ßpscùóö{Ó4ø¾½W‚ +J<7`2qA+š"§*TÓbhé:Ù3dtH×àIƒt\Œ6¸R‡!‘Ÿâ¸’›W,¯ a$yúø ÿá¯ÿ­ªùù׿d¹\ú‘"¥äñ£S’4àææŠõæ†m¶ÃB”Ò ‡#NNNØn2ªªb>=¢­íºŽfsÂÀ#‰­¤ySkêÊö¥ë0LC8ž"… *kÂ0Ez¶¶‡˜—oßþŽ?tû¬Ú,`l# }vëMQ¢Œ²�,W"Œ!/wháG)ÙzƒU•ˆ¶% žŸžÒÎZÊå%_}ñ”8XÜXÞ ÓG3ê2Áu]„4äyÎl~ŒHÎϹºzOJ²ªÄõ;\_b”¢is|aÄ ŽðA¥Çó#v»£á”]UðíwïI‡Š¢¢nàf±áÇ´Z3ÉóŽôɲ’<·zòóÙ„ép†#°48µ"‡VÀ®±½ž=Ëð]cêºîƒ({�"³Í÷0 )ŠaŒEÒùþAtËó-•2šVwXðIÇÁtÝ}'ò,°'µÜ¯ça ι3Çrš ·Müýºï–úÇA8¨OÒäq „øÜvW(î¡#¼ ¸Û;ºûz„ m[Ë(ðQÉPÎe܇´?·Oe݃ëûð|T×Z@Œ”(ÕØY-}Kç^oŒìçЪšª¾U‘=™?î‘�÷×Ú¶6Ó Ã�ÑhLY6lÖ»”c‡*à ²T8ÚP%ãÑ”À·eÁ¦V(Uqs³ ,k\éc´`~|ÌŸÿùŸÓ4 ?ÿù?ó÷ç¯Iãñ˜—/_’$ u]"´a82™LX,ìæon®xþü9Ïž=ØŽÿøÇ\^]ðáÇÞðZ¦¥ïãS9¨¶£irܲ¦ )½�K§*Š6g2›¢;—²j)WAñáÃI:d0šryuƒç'|ý‹oð܈o¿»#‰Ãבes�B)+…ê`µÝ‘o7¡‹îZâ8¤¬+¢(>ô­nnnxtrD$QÊ0I)w;´îp º³•œNó»7¿£( V« '�‘ï2<Ïc6�R×–ðôoÿöo9>>¥,KƒÁáþ±A…ýNWUE8ø��éFJÖë-aí’¦V{)ße¸¾k¹ð6;›íšší¦dqu�ƳÁ|:åúæ=N³¸¹"Ïs¾ýæ7TUÅt:çÝ›w$IB„4ªÅ­é³i«wöá⊪®éºŽívK×¾øâ FKú¬µæødN’äyF[Xà,Ý IDAT–ëÒ®ktס:C’Ú 8ÏkVË5U•ƒãR”9E¹C8ÓÙø³¶àáöÙÜó³GVϦ©Èw[\Ç¡«ì „06’7ªÃqìLˆj¦3˜¶# cþÛ?ý#g�ñ½W_2�9š&¤iˆÖ-u•‘$!ƒ4ÂÅp”âz_¼zI«j¶Ù†õfA2ˆX.¯Q]Å&ßP¬¯ñ}ÉãÓcÎóg?ø>ÓÑ€º,B°Z­§\/–(#ùí·ßQVß‹ñý˜ßüæw–UkÞŸÀàø!¾o‰¥tɳ‚ºª-ý vî¥kí<Ét4Á‘’ããæó™¾’ßð}-¬¡jU{§¦o� t×a´íGt}F {)l!„ÕzomÉÍÎ]øð�¼“1h­ûz&wŒ»”×óî)›îÐî"Ûöàa î®¶sHV1󡱯±ÇÙ#·ö%©‡ZEûRåà k¿†»k»;hk³ ·Þîãìeï`ïõÈÌ- Îö€>†Mß}¿‡kÙ£÷ç,yèÕÐÏÞìç|ü>»iÛDZ¼nAà3™Ln�ÆVò"ë €eX—Ò"‡ÚVÑu¦—5¶Ä·º3cŒ@ I]5äYA§\^^!¥GÝ4ŒFc¾ûî­e$î¥É V^  šívÅ‹Ï9{rÆ`�¸ºïg…aÄv³f4õˆÃö÷¤kû\F>£á¸7j0Oðü€Åz˺Ã/JJu,<Ÿ«<ä8’¦ªé:Ð�äæfÃÍÍŠ8òìÙs6Û-'§�ùú¿àÃÅ5a˜ ;­]ʬE8.Íj½Æ‘.V™sÁÕ夔%ð-’5ßn{*,‹â+‹²×¿j©ëšélN×YŠšÑdD§<:}D’$Ìf3vYFQdÙŽ4Ъ®"”êŽÆdYF^”dùŽí.c>›2ˆ¶Û-ÇÇG4m�ï{�gy-7kLgeåWË-YVâÊÝi<×ã‹—/8}|„+»ÝšAõÌç†ÅbE–gäyNž—¼;OìÕÖ±ß9�‡ù˜xÀñ©kñ°/h‘ÂÀ·CªöÌû^Ͼ|&„°�ˆîÇ TCž•¨¶£mT?�ßö�‰�`\I’¤~DÛ*Ç¥©[¤ôÂÁ÷C`·Ûqs³Äó<´ÆÂ‚û�ç¢(Y.—¤iÂóg/ÈòŒŸÿó?ñÍ·ßÒ45?ùÉŸ1�Ž1FXʪº¶à—¾1žD MSÛs C‹rjšºéyøì�rQ=Ã#ð#Ã1ÃÁˆÕ·ox©¬°›”.…êø?–kêJG)ëÕ‚²lY,6\/V¨Î% ‘äUÅz³¡m:vYA¦ÜÜlpeˆë'´MK•m¢×ó(Š‚ÝvkAI..¬üu† –{›åx¾Kš(ŠÕ(+1ŽCÅ`¬Œ‹jUÿ¹Ûï•çù‡.Jb’8ížžEG‡ Òq­Rñ& �àúUYáù®%H­+ꪢkuUÒ4 ³ù”<Ïñ<—²* ú¸ª–Ë5»MŽÁ"éNŽOxñòýWŽï9d™äK‹š\¯7\_ÝpuyÃåå%e^¡”bØ÷éÞ¿?çí»·|õ½€�¨F±Ûe æó9y–õ3e!R:4MMÓ”C?bz"\p¤Ó8öÛn·¬–+ª¦Æ“—×Wh­,%P:øãz@{ä9´�—�ƒñ=:£-ÏRàCžjí «Àó$�ñ7ùï F<>}Äf³árµâ»7ß2ùòË/™Ïça¸¼¼äïþî¿òŸþ·ÿÌh4àÕ«W y‘q}UÐÔ;„hi˜З¤‘‹ç¶»ß½iXÇC&Ã1ƒtD[èc­Z–7+ÂtÀx0åÉãg|ýõ/iMÓZÄRD4�"¿¼!Œ|Žf3´Òãà9RH/ ô}\Gp}}Íh4b8§ u«Xmvܬ–¬7ê¦ÇÁé3­m3rè l¸/׸®kì´¦ëÔ!RW=ÛÁÁðïQ\z/¹}¿Qî<0À‡Hÿ3Fö^OåNp÷³þˆàn¦søÛáÑÿ³°7ë�Ø—ÊúR à€`ûŠîË-|ªWei�8(�Þ®ÛGºÎ½õï©5,Že=`?#¥'áìo.GÚ’kkëá{Ïl¦Z\×ãùŸþWF£B8l·kþ÷ÿòŸÃ{]g©ï…賥΢ ÷ÚOÖxwH$ªÕh]… i2d»Ýây‚¶íü�ݶÀÉv³°™’0”eMÓ(Š¢¢m[ËV�ç(¥øê«WÌçÓþ;:fònL‡€cun�–µ^Hâ Æq,3¶é4Q¢”"Û”EÑ7“#L§{‘± ðñŸº¶‚“F V« G'��ç þê¯qÿËÿÃn›a€³0&�Έã­ J»4eËjµ%ËílÒ6«Øå%�Q´ª"N­*©å3ÛXx»çÒ0¤nkêõšñh`M”=Nl7 ª¦¥Ûmñ<ÉÕÕJMQ�Ö†ívGø#Ã>£F2àápÜ—H[ÒAlÙ¨‹ìS”5—¢Ø*ûwK TÐv )ªí…­)Êœ0Š-¬Ú³•”j—ƒpX®6Lç.e¥è” ëZ›+û}õ<«{tzzŸþàOùá�þh"ž?;ãÝ»ŽÁ é3i»¯~1M©ÅÅå?üѸY\¡…å“\.Ö ’„‹‹K꺥®[ں᫯^q}uEÓØêVèù=ˆÇ`z¹›8N­*¶'ßó˜Ï§ìv;Ö›ï/ÞrúøŒ§OŸQ–õGöçsÛgÐ~ÀÉó$e^8nçy^�Î2H߳ѓ#xûö-yž–(ðx~„ï»ÓQ[;w°Z‚qøÝ·ßÑÔeŸ}th A°Z­øõ¯Íd2æèèˆùúç\_^ñåóç<{þœªi‰Ãˆ2Ï)·yÑNZ\ß³Œ±u…#%oÞ¼Áu„î8ž!ŒA)uOÊ@8vÀ«ë:B?°„ªFD†N54UE�tmM‡øaÀìhŽ~÷ú5—×WÔu ÒN»¾‡ß‹µ­Í‚|Ï# Ã^ùTöpf�Ó—Ô–9üNÉê;µáÖhöŸ Î}4[sGÚf·ªÆ˜�z'·üáãp·¼ éÞ;vežž=g2óÿ_ÿ!þ‡ÿø×¼xö’7ï^ô¥4ë¬ ‘Ò ¥Çb±Äspl{¨¹å&´ÎÄs-™ãn[PÏ–du‰ëØàe0ÐuëõÚ®¯?ž1š4µÍ÷Õê†$ ùó¿ø7´­âââ=›Õж F�GÛ¶ì¶9uU!¥àÕ«W…u@ëõ¶3v»›Ý–££³£9mcðbáÚ9¤¶íè”a™¦”Bàì€l]3Ê êÈRö„ …�Æñ\ϲ’(Õ0FŒ§@s|rÄÑÑŒåzGžÙ²˜ç[ N šãÓ£X-®®¤mFã)ÏŸ¿d»[Ç!ãñ”åò†Ÿýì_ˆã�$Še‰€½¡ ah­íÌ�Æ–Qã$A Èóœ$M{eW‡««+juÎÑÑ '''ö¾–‚²¬Àñð|Évµe»]S7–žh4q<›sñæ=J)ò<ç»×çœ>:f½\3F\~¸¦ªJ’$%‰,jÏRþœk¹·}^�NJ[&p­@QWw”mmA¥®¤EÓ¶ö¦ùæõ·‡OkÍã“SN�±Ù¬Xo2\/d4žQ7-ß~û׳ê§A°Ûæ$iD]·üêW¿¶�1Õ«íã…춪R¸Â¡S𲬹PWäeÉ�þô‡6Bö ›Í‚áÈF–§ÇSšºÀ“Ï“4 –â\)´VD¡Ït:a»]#Œf2ŒIã„®­1Z¡[ÅnWóüùS[úè 77 ÖÛ5yU‚cýÇ•HϵeI@kK¥Ó¨š¦m{é¹=$úþ¶/ÕÙýzVmÑZ®”HÏÖåïtçcƒ½?Ü–¤Ðá»s;ÞûaFñI$š¹¿¯=[Zw2 sð{Àw·ÏIAì××u�Îýl)ñá9Ýw°{ˆô]ÀÄ]磔:Àë•RBئihÛšéxÈd2Åõ\®.¯úlV2�Îx÷þ `jy^Œ‚ã¸4�¢®2Œ¶†¹,2ÖkeÉ#“Ät� FŠ¢Âq\~÷Íwxž�Ñv¶DJiéû>Ójµb±¸FJÁ£³'–Å=òɲ†¦mñ<�(B‰8<9{Äå»l·MÝ1 ú@ÌÅs ¯_¿aµZ�mw$iLÛ~4š0ÎsÞ¾ûŽ0JÈóc,èÈ•¡Í¬Œb·«x-}¾/¡ëÚ¶å¬(øE­èTÆ:[a„ÕÖp JÕ‘ÇÉ£#Ž�ç,W7 cÚ¶±8ÒPV%�]^3ÅùŽ‹÷—® �ž<~ÄzyÅzµäÃÕ%ÙvÃüh†ïû¬VŠÂÂË“Á!e–[$¡„´â–NKY[%Ok4¾ïÒv.ž/‰D‚Ђ$�(…¥ðQÒtÈÔ³ZmhUGÛÖðº)¹ºþÀ¸S$aH2LlÅØîÖTµÂ‘A0& +êF£�-×ûa€ïûŒ¦)Z´|÷Ý7 [LWú>iÙ@c½ ëÇ�Nyñü{¬Vþáïÿ_é��UÅÉã',–KšVóáÃ{~ö³¡,Kžœ>AÃó§Ïp—N7tM‡úø®GSÖ>ÆÒó(ËúÀ-¹¿N¾oµ§â8æèø˜·oÏyûö-Aþñ¨ª*ºN"\{QÖÛœfgQÃá?²|N«Íš¢(xwñÞ^´ÁŒa½Û’ow4McuÎS;·Þäý b!ŒeÕRÕVçݘŠ4�é:ÃÍÕ /¿xÁÊuùOÿùÿd2?f»Ë9::b>›á!ž#Q�ýò´t¾DJÁWß{…#%�Ÿ‘$)uÓ¡Tm\:ÑGe-m+XÞ\Qd;ô}ò|G–m CŸ(òm_r•ÑiEE¤‰•«_Ü,ûkñˆñxLÆ(§¥(2Ãÿioþ#É•Ýû}î½±Gäžµwuu7›MÉ9J#Y’€g ÏÏ‚a0`Øÿá³?Á~$ëÉ’dÙ˜ÑpV’Í­»öÌÊ=öÕ?ÜÈêênR  µdfDdVÄ9÷œó]ò<Ç6ƒžçµ<¤!�ߣ®Q³\lðýB(ò²Á²,ÓãÓd1% ƒ·hø$Ï™Ífx}‡$ÉÈ mI_çÌÑíõïè/Û‘t:]~õËOY,¦8vÓ‚4�1“$Ï(ÂÕïaÛyU E§ßc8èS´n­¦a…1 ùÑ�~t«´-„ ÌJв¦Èr\W· Av K�ÄYzÛaXm6º•îw¹wï£U¼Ø.¶mÇöMíª¼Ú�f1£Ñ@+­,VÌ7Ú)¶¨Øïg)YÑðôó¯‡$ñ†)9:|@…Äq¢¡ßïrx¸‹�5_ó9'G‡˜†æ›)Cb(ÅÞÞ“ÑξžåVÛÚmX.×üò¿æ£ý�,+øüéW,×!UÕðæã·xxr¢Û�~‡ª.( M%‡ŒF}6+=k2-}_º®«sBËw+3-écÙ.ž�Jò²f2™¼v×ö� èúú¥i‘ëƒG)YQâ>NǧÌRί.¹¸¼Ô²êá×Õ½N·£ –¢lJ’<Á2Ò¼áz:'Ifó\×ewwÌÎΈ4޹žL©ª!ýÞ�Ï>ý Ÿýö·t»]~øƒP5Sk…mšDaÆ,] dƒëÚ8»Q·@νû‡HƒAGÛïV`ÙUUÐ4J ×À÷»ˆ¦"Ž× G]ê²À´e•’EªU¬–KŠªD¦–çÈs‹…ÖusL„¡P† Ï3²,¥4q”Fû Ue;chÉŠB¼°V¨u R¡�©”n—µh&ÙÎWB{½0·AÓ°¬W¢ö+-¶úu¢å«x D° àÆv¶#^@ºu"¼3ôo¨ê„D ÅÓÈ×+•W�ýjÕmbmŸ×nùP¯½†—“׫Վa™ßzüW�ò^�Ie;h–T•žƒøžOÕƒE£¡ÛŽë´e»µ10X¯×$qJ–êy H6›)%½žæºláÎëuØú¨èsé÷Lö÷÷¹¹™· +âà@Ûx¾«ùr-€@)E˜„\\\ÒéøôGxžÇb1#/’v! Õм$ uÐ4M“p³aKžMÓX“.«ò–`]–%M ®å`9†é' Iœ1›-pœHë—ÍWÜ;ºÏùòš›õšchû�²ªÙ�bJ'òîÝ?âìò‚¼Ò|²¢.ñ—ᨋï;ÔMAP–%~`S•µ‘a&Y^bY>ÞpÈG}„%þñgÿ/Ïž�²YÏy÷­'€”Y–i+‰$c³™ÝÌñ}ÿVÚ(Ïs¢(Ö3>¥4­n°¤Ý:b,Ǥª &zÝMÙè ÙÑ÷YQd$ID¨ÕÖ¯Û 888`z3gµZ!%¬Ö z~i(vv÷ñã”Ø�èõz¬V+¼ Àv=ÖaH”fÔuN? («Œh½áé¿% —<~ó`kø¼h8>¾�‰4l..gÐ(zÃájM‘'L§3šÇ¥iŽãiK›N�ë«) “‹+º½×ÒÀ–­Ž`ž¦Z Wj?ÐóË2²ÛûW-Ô¼]½êÍõOmß™€®&S”RÌsÍØ–z˜êÚ¸h³ÙpþüœóËKÒ$g³Ü®ÖìŽw@Ô8–FúTuÎdrEš¦$‰&Û%I‚TŠÉtÆ|±BIð}—¯¾~N·ã1îñî»ß'ÏS\§ÃÃ7Þ!LR:Ÿ8ùüóÏùæÙWDцÍfÃÎΈ<Í4$¶®±m[«¼ÖŽí°3ê‹k"¸®Å£ûÇô:.‹ÅŒº*Iâß51¤$«+P ÓR˜¶E§ß!ŒV›5—×S&“%®ï¡ ›,ÉÉÊÑÔX¶�ÚŠ®šP55e yYêDÖÎpʦÖNÑe}Û†ÛêÍUõÖj¡å½RÕl/Ь£ mR`Kþ¬¨ïÌ\šF'ÀÛàü*çåÛç/µßRQëùЋ*C¼–HêºFÈ—+œW“á«­ÀíßoçIrkc¡ ¼¾«‚»ÝŸx-h½âS·â‘ígeÚ Çóo÷S 88zÀ;ß{‡NG«茨÷stpÌýgÿW×W\M.X,—L§S泫ժE‡j[�$‰}mÖuMšê ¸³3bz5EÐ`HÉÑÁ>Y¬+…²€÷¿ÿ}ÂHÏ6ºÝ.qE‚,KHˆùô†A¯Ãj¾d5_j$e£È‹’"©¿i•¼�Ûk–å(ÛAI‹8‰ð}‰i¬£ÇÑ�pµÆ¶\Îãk<×'/ ºÝ.†%ÉŠ¦¯†!éö|Æã]Æã!óé„¦È :�a ëšéåÃÁ˜4\±;ÞÕÐéÍŠ8 �Z·öª Ï1°ƒá G¿ç3¹:ä«/¿æñãÇH)YÎoH‹”£Ãc”!ˆÃDz 7fK õ�Q·GÇõhŠ‚2K©ŠŠa÷ßµ™lV¸®ËÕìË6è>Q¸a6Ÿ")Y,çäyÊpØÇs­RV$¦­EW·‹Êª©I“Ãr¸w|Èîî.yTòÏÙ¾†=[ÎXmB®§K|ϧ,2vÇ#â8!ð»øn€mz¬æ+âuÂh0âƒ÷~À“7óч²3ððÁ=Ž�÷ñ=›(-€Šï½ûŸ=ý Ûµ†A§×eµYÓí¸¾Ñ®‹ï¼û._~ù•nmHÅ›OÞâàø� `ÙŠÞ `±˜Ç!�Üg4ÒëTe¡9< T¥úô\�p£•º//®©«Ê’7>¤LcÇÂ)J(=gR[Z4Z_k;ãQB·\ à ËôŠLƒ›�–  Q ¥$EQ´¶ÅyžÑ”%UYP—5†TØ–…c;t\�Ÿ£ }WUI‘&ÔeÁ¨×çpgL/8ÚÛ£LSÞ}ë-Þ{÷-žý5ÏŸ£çʆD©š<‹©ªÓhØßñÆÃìïŒÈÓ˜õrM• G{ºõXÄxŽ¢¸ÐÔ¬–!ó›%Žå“Å%ëÅš&/ñLÅßy›a'€¢æpw�/ž>åâò‚Éô’ÅbFØÅq,,CR)YsyqNÞ~Þ‹õšõjIš$4eÁ`8 * ªºÂ´m²,'Ë3 Ë&+ „Û±IÃì_Æ :^Ðc&Ìf3º�K·Óáøè;ã½�hÏ�8fÔÐëu°Lƒ{÷0 I–Å()éõ:¼ûÞûìî1ô˜/æ,—Kò² ŠC Ë"Œ"=|ƒßùøcNOÏ ×nnnðÝ@ûá˜&Žcc(A–f@Ãlz�ïû¬W öö5g#Õ¢�¢ÑÕ’qZ •ÉùÅ…V¡® Æ£>¶)±¤@RR9¦©0¤ÀvM|?@(´‘�!¦¶¦é²^%T•IUJLÃÃ6�¶¥=ê=Ï%/2Ö«5¶ë±¿¿O’h%\Ñ"ð^(ÀKæº]%J¥�êÅûù¶–•޹âò«½½ÚI| К[eƒ»ó )^ éy¹BÙžïV�ä.qS)ZþÒ]h÷¶ryq®M ÿöŠ¥ýíå÷rW¹�mçM¼xfÝP7åíŒmûºÛ㊂*USé–&/Ú––¡¹–¡�Êd£%RÊ¢À6mþøÿsÆ£¾þú?ÿÙ'<~Æj¹&‰“[mº²ªØ¬CÎÎÎyúÙ˜¦ÉãÇor°wÈOöSæóY¦µØ†Ý>a¸¦ªµhçf³Æ4M†ƒžVݨ LÓ È <‘Š,Ó.˜�n‡M¸QS:ñئ‰m™yÁÕå„Ë‹k ÓÆ±=ò¼A*‹$-h*ƒªn˜\]aZŠ^¯‹P‚¦®ŽŒ†»”eÍ—ß<§J‚nÓ IDATn†éàù²\sLв / NϦÌfs¢ÕŠÞpDUÕ-çG1 5׭ȈW ÞN2,Û¤Ûëà)É/;Ž–IR‚a¿Ëѽ}ŽŽèv}”‚ª)QÂÀu\š †ýëÕ†›Ùì¶’ït: ]L¥@Ô$qÌîÎ�$ Ã5–aÐéøÜ¿ÌÞÞ.4:ÑxžG·çsuu†RßÕ<¥4I è�Ã)ʲÂõ|‚À'Í2’$Ñ‹©ºf0ÞEHÃvq\‡$Íp=_åEƒçlVküÀe4àÚI’% ¾c³;ó»?þ˜£ƒ=|Ï¥¬sú½;»C¤ln…lË2cg<àûï½ÃÉñM]�Å J\^/ØÝßŶ�ŽÃzyC·P– ¦a±Z¦L§ ž}}Ž@à[&¶)9ÚᘠC,3ž?ƃG'l¢�4�‰ãˆwß}›‹ÓSf“kÖË%Q¨ç^Aǧ¬+²<#pl=-*zƒ¾n£VeUâz>eUµH]}Ÿ§añ/ã½ùæ›DI�aºlÖkŠd�PûG‡†EÓTضÉýûG|þùo1l­VDÉ­=Ádrƒi*<8!‰µgOY–¶aòö“'ü/ÿÓ¿ãüôŒn§ƒ”º Õ 6ÖÕBëq)!PªÁëºņªÎpl‹0 ±MAQ˜Ràu\„Ë´ÈÊ Q ª¦Ä�6ƒáσóói¬ÛNQšpvyAС(c®§ø�EC¡ùâEBy50kÆ¿Š[ðKPâ;(­íPýÕ�ù«ýµÙö1uÇgÛV/‡þ»@·W¡Û¤s÷¸ú\^÷éyÉöêxÿ}ž<~Œ’Š‹‹ Âõ†À÷xôè LC£‹h`Ðë“e A°\,¼€étÂññ1ºjõÚ­ïŽaiÃ$Cqy}I§ã’fŽkâzI²Æ0 Ò<Ñ�Rè@WRµ-¥’¢®´à¨0 QL§ êJè¹N‹ò+ŠŒFÔÄÉšº©n‡„®ëÝ1�z‘T^qý¡oЫ3˜í¶…qßM>wè¯rZ^⹴ɧn��¼c"×h÷Tq—ó¯'ºæåózÁÚZ‹;övÎÄ«ÉêÕjîÎ{ÝžÇV蓆òv°ÙhP†ÐªÓ†¡0̶�'¶öxÛjKW yW¦ij¯Ï»½‰Ë²j� Köööù³ÿâ¿¡®jþæoþŽ0Šèv:|ü»?æñ“'ø~‡e;×1 ]µ÷ûžo½ù˜ôC=zÈrvC'ð;>OÊŠ=ÇÖux]Ñìíuº( ¢©õ²®iÊRwL“²,éø†0ˆÖ1žëÓëtõG\]]“$)eU²»³Ã`ÐGI�i™lÖkNîߣ(rÝ^´-zýQ´¦ÓñQÒ,b<Þ¡ªê–ßd`[RÒDYÝ~Ÿ¼(£˜ùrÅxgÇõ(¸™iœªÑ¦„š˜é“WW×|óÍóV!ÁÖ>eR` Û1µ¨qU0ŽY,fLgSzÝ õ_ ±-©$žc²¿·ËÎhHYd,sÊIóüÙsök¡lƒp³æû?x�éäšÙtBพËîx„ë8˜†V\/ŠL/´7½^Ÿ¼,°‡ÅlN§×E&y‘#…zAÇhÒ¸ú—U@�=b´s@·7 ®*×Á2777·C`e)nfS„ ‹ëÆ;=¤!ØDk,kˆm¹äyÎr¹Ö+´Ôf³Xóüë/h��Íx<Ä2³› ëUˆk[¼ûî÷¸™LZ ݲð=�4Ièt|ž~ö9®ë°;óæ£7øðÃ5‹·¸·¢Éwbƒi ‚ŽƒïÚ¸žÔ†¤‘ ”N'°üðÞy箯¯yöôsvwwéúºÚïú‡ÈªÄùê9eUb’ã$aÙ;¡ª|´F¢‚²ÌÉ+-È»;v ü.ãñ_~ñ5y^QWP5p¸»K–—DIŒ4´LŽi9¤©¦9¸®‡ëº8¶¢Ó ´2Až"\“ÁÀ§Ûuðý××Sâ0B‰­µxAZæ4eÉéÙÊ´)ª’(-™ÌÖXQB§ßc¼�ÍjN\¯�²,næKV›�›Ù†$k¸¼^ÐÔÇqð£½?„Ò-¾éü!$®­=x*²4FIM`vlóvF¹ZÌ Ã�Žïá¸.U-™/Zu…¡4Ϭªtõ±š/Q¦ÏhØ%\C‘”x¾�a(šºáèhŸ~7Àïx¤MA§£Ýg'W—4u‰D«”yA™gz¦šÆ„Ih{uÏ È‹Š,+4gMè÷¹]dRé`ñ ²ôŸÚ¾³zøè¿÷ûÀ»ï}ŸÃýCŽ�Bp~~¡¡±¢Â4ëÍœ$ 9;}F·Û¡¬rh ðV+-§‘g{;Ú¯¾* ž?†mZ(CûÖ/ ~ù‹OãˆNC­Uµõ%Y-WîîQd9'G÷q]SJ.¯.yúÙg4èª+Ë2²4cËg©ëCé ]6%‹Õ�VÝ®ÊÓÖ� ¥´ºh„^7[¶ƒaZde‰ëu-˜Næmë&§¬K C" ©¡¯¦äàpŸñx¢ÑO–©àÎ âE ÖÜIw¡ÖJ~Û¿êÅöOqtª6Yé'¾ˆÈÛ�½åísïîOJ dw‰´/µ›W’Í‹cß}>wHlwgfµ^ñ×ÿçäg?û%I\�9Ëå ¥ŒVQ:e¹Zð«_ýŠ“xë­·8;;cµ\¢”âää„(Þ …nc ‡(Š¢5<4yþü9ãÑeYø�V$H4ÿf±X²\­‰’”ó‹ Û¡*+ª²ÔªÕÓ)Ýn!µ“ªPUSs5™j�3%±�õrMž8ž‡e[˜­ªûzµâ·¿ý”º¬[ù�­]¿ðÞ{oóÎÛo‘Å!®eÒ <>üáûX†"�Cž}õËùŒ�ÑC L¥U'öϵ�e¨4aþöÛX†Ä6L|×Ås,KŸ³kÛˆF0›NèøZ(Õs<WKEQÌÙÅ5i®íJ6› yž!•†{Ó4ìííaÞz3UyrËݪªZ/4Š%µ �lQŽÓr˜ÜÌ©,–+VQB’ÄY‰åøX¶ƒe)²<¡£”²„õ:&Š2ÊRPæY^PäuScšÓ2n‚©j\ÇÁv,|ÏʪÄq,êºDJAǤILUZÿQ��X–Gø8¦bowL†X¶EUÔ(Ó¡¬ô=ã>ãÑ�~Ï£8®…ï;X†EU—DIÄj³Bš’†CIº~Àx8¢ÌrŠ,!Ï2 NRŠ¢,Q†Â÷»lÂ�$É£�MiðKšµ­ì‚ºiÚûNþ3g@ß™€Ò,agw! Ób±XpúüŒ( i¨™Í¦l6K¼À¡%E‘ãù.A¯×e<³Z¯1 Ó´xòÆ}„€$Ž8?=#Ïu¢êøî-(!ð}vwvùìÓßbš¦iÒ I¢„Ñ`È2¹¼ ÿë¿ÿsŽ��‘4ŒFc|Ï#ÏrÒ4»åŽÔ5¦E^ÄID¸ÙÜ*Çj†µTu£Ÿ�í¸Hâ¬P5‚(J�BjÕkÇc6[‘åe+æX�¨1lƒ4ZÑÈ×uè z”e� C)´ýËsM¾/µÔêºy©JÚñmzi.ôÿ—xZUé²Òª ¡ÖP6µ6£¹u-­ï&)^i£é�~;+º{üº®¾5m·ÛDÕ¼ØÓ-˜@´ õæîñäíãwÏ¥i}† %µ%°eâZ&®ca™–ibF Û5±[넦Ѻ_�ëQäUÛ*Te‰2ŒÖMô‚'O¾Çp0âg?ý9uSó‡ü‡%ø‹ÿã?0¹™qöü’Éõ�¾‰£¨%†\__‘®ëòÙgŸêÎÁhÈóg§Ìnn8<Ü'IÎÏžšç²\.u{Ø4©Z»…,ËÛrIYV,‹–„j³^oð;=Öë�ë뉶ž¶ ”’ÓÓSʲjUœzýi–#•6HËËB‹qšMSF+Š"Å4UY†!i’ …ö¾ÙßÝa8è0è0õUÁÉñ!‡û{ }¨+FÃ�ŽG·`ˆËPÔeÁ¦Îyx1Áèù[Y0ÙÝ%“‚º,©Z%’ªÒÞX–!Y.œ>{Îz¹Â1-`[øÅ/~År�0(‹Š²¨Ú–°À¶lD£8:<¢È Ý1)Kú½.R4PéÄ�¥yÚÞ�†¡¯!0L ×õXn6TuÃÙÕ„F(YYE1û;L®¯É³ŠºV8v‡8)‰ã‚,«[ ô’$M4øÉ6±,Ó6q]‡ÀuôûQš¶ Ç 5y–²Y¯°Lƒ8 uð—Zý^ �MC^VØ®OÐñTt»ÒoY¶FùYe#ÙD¶ã`˜C ÒdCSRÇ¡®¦š×w ¶ûÏRŠ4åf:%k‰ÇÚ,Qû¼uûCŠ¢b:›QU5gççHiðÖ“·‘JaZ»Î´,T vZ®ÒY ®×pvvF§Óc<aXo¦¬LÛ¡×<Îåå%�ï±Zιºº¢×Ó7uœ¦ÄaH]V<ÿú9ÇÇG(¥ø£?úc~õ«_òî»ïRÕÅ+s½jm+F tð‘E^RW eÑ�æ%¾ëRÖ°\ÆX®‰åiVS” �,k7 ŽŽŽè4l1K_ °êº$/ü~—““{xž†––e‰ãxHÑ�§îÜ™½Zíð’}'Ð[²Ù^åÄl÷uÛÂkjhç>w ¡w“Œiš·¯}ýKæ_m³Ý=ö·în¯ƒ¾ûyw·U‘ÐêÓRaÙ ×4°,¥MÄT�²M¶ÛÏò¢BÔ@U°ÙD¤qB]×A ÛŸJ1«ÕЇÞ`>›“f)ãñÃ2ùůNš¥ÜÜÜ0ô(Ë’ñxˆïÛÌf3–«²,e0ìRVדûwÿ‘?ù×ʽã#Ýn›Ïxøà!¿üä§4�Ö<Ô~;7ŒFcºA‡8Ö¤QÇñØ´Ìûí÷ èÞƒŽ8{~JYÖ,ÚþøáǬ×kvvvH’„årŽëÔ�¶„ÈË‚:Ó–®çày6¦%±-IÜrèâpÉ ßñlNî�ðñ�? Û ˆ6s SPeOÞx@™gZ6k³ÁVŠùäRë¡™Û–M…éØÄ»#ÔÅ„ª®°m›Îåëû؆‰2uÛ¹(*¨ j îÝ£ãùäYÉ ßc>[ jð�Ùôš¦)´g�ašdiÉ|vÅh8 ž~ñŒ¦Îèø6R–x¶ÃzµÄw<×#/4Sn;�ul-(ZÖš,ž¦)ÂÔ¢¬AD%EÙ°\%XfÃzn¬QÏíÒ`GyÚ`™>Q˜S× f-X¬"Âh‰ï™<<9dðà>Q«*¡„æÑAÐzï”&Dᒢ̨ꊢ¬‘:�¦TäU¢DIÓqØl68¶Ï& ‘ʤny~úõ&›8ÆU’ªÌ©›$K\Ÿ²Ì™Þ\3ÜÝaGœ_]RZ¯²×ª~û®‹c{-R3"/ L×Ó(Tiâ¸.óåŠN¯ÏãÇo§ óùŒñxLÇ,—ËVôŸ·}gÔévØ?¸GŸ®‡”&o½õ6Ê�œ_œòÙÓOéö{Äqˆaèö’TŠ4+‚†4p—ož=#Šb6ë)®ëâ{�–ëîèöº­Æ™äуGüþïÿañÍ×ÏP†ÁÅņi3¹šðàøX\ÑŒdË6999!Ïs‚ CÕ4„aDÑ’ÃD;ؤYJ²‰bÊJpy5%ŒRúƒ!ž×¡Û ¥Ééù%Q˜PÔ5a˜ñÍóSNŸŸÓÔ0j�TÓpØßÛgg¼§EL[óLò„ý½1;»#º½�ê¢ÔM…i¼^l+Ð}àmò|•˜©¡ÒºZk^ í,èE+­ÖP2”a€·R�esÇŸ‡•ÌvÞ´ýÛV°UJ©5³hùG¯$@ýœ—«±-ÐâîœH�['ÒWß_£g?·ðóª­ª^NJU]£”Až¦8ŽCSôz]¤lX·í®,K0”b½ QÊÀu=nnnÈó‚¦nج7H%©ë†·ßz%-ö÷ w‚>§ÏOÙlB¿ù˜N7à/ÿú/ÈóœçÏŸãÚoï ‡GûÜ;>² †£>žo#%œ�=£ßïâx&ï¾ó¦i2¹º&Ër<¸O·Ó%zšÈgh͹ùl�eÙ¸®‡ã¸¤IŽeZÚ’;/X¯7¤iÊ[o�ª–Ü?9¡Ûépzöœá`€m;ÌgZê%ËRºÝ£�BJvv÷°,››Ù Ežx–%°MA-�zî’'¾kó“ßù˜¼÷=ž¼ù®­H“ U™ D�m)Ó ÊsÒ$¦ø-ç.AIAUxŽƒhÝæ´ ¬¼`8_"…nɆÅÍá¦T¸RU”¥VWR¢„ È \Gsï”R¸®ÃÍÍ„ùr…T7ó5]¿Ãz¡¤�eÚX¦ƒeZœ>?'M4’ÎPŠ,Ip=Ï×ÁÓ—çWØ®Õê¨-ôëmËuÙD1“Ù�6º«(“¼„8ÉHÒ˜éõ¢‘t‚!ëuÂõÕÓðhj�TI’`˜ŠNàá:6>`¼3bµ\�gš:’e©ö Š"ꆫËK²4Å4 LÓ@IMˆmh0m“ñΘå:äìì”ó³3úÝá&Â0lÎϯtWf¹)X­Wœ�ŸQd1ÜÇ÷]Ê¢À±ìR>¢hj&ó9BIúƒ¶åpyqŰ?Às<=GŒbLÛÁr\Â8a:[!¤âf6g½‰ïìqòàÝN—¼}L®'L'Sæ³9Y!þePExžFÕ$qÆþžw;»¨8?¿D)ð]“Á°‹k÷Xo–|òÉ'¬W>|ÿCîÝ»�m»<{ö QGl˜N·Àq¼VâÒ¼ ܬ¨ÁÅÙslÓd¼3äþ Æã]ŽŽŽ¸tïV­®=Œgïw;ôû}6qtk¤å8z³uÕÕ„Áz±$Ë4ìÙv| Ó¡®Qœc;e-¡±X… iQk=¯¼BÖŽi3Žñ}Ëô‚Rôû]â8&N#¾yöÃQ�nà`˜[ó²V¶F¼^Y¼Øt0¡åömIªF™òN5pý:äñ5%�VI¹¯?ï®FÜÝ¿Ë͂М"u‡—³Ý÷«çß¾ú[ÏM4/Wo/ëÅ É-×I?Þ´ [ÿÞíô™N§,fSʪÀ±žgãØZd³YµŠç¦]y¦ýsªJëpù]ùüéŸü[º�EYày>OÞ̘ÎfZ¶©ÖvìŸ}ú[...4üz—Ç�åUmpïxW[Ga´a¼3Ð-C¶HM½Š Ã¥�¾©¯•8n —’ÿý/þá&¥®ã[!Ôº‚8JqŸ½½=ò¬dµZÓíöùòéWœœóáñÉ?þ”ÓÓg¼ñè“É„÷ߟ ððl«]€I\OÛ+WeŽ�5‡û;yŒ6ÝÀáøh�÷Þ~LU–8†‹ckUxêJÛ†#@4eCÑHʼ ®5�·È3Š¥ÎRÒÄÂ1- ©µã(E ºæ7×!ØÝ{̰�§¢8Çs\&³-[hË–4�‰’PC‰›šù|B–eØŽIÐí²I2ò¶å!ªˆ^wHô)ˉÑR?ôû�6½~èñ‚OÞ¸‡2*®¯§xŽIš'í¢L“̳8Dð\׳ùô7¿ÅóNN2öIÓ¼] f³‚ŽÃ»$�§ï!1”‰²lk]-×RÐwëas3Ÿ#}öÇ;x–öQšÍçøƒ�V´1,âMˆh$»ûPÖLn¬×klÛÅ Lªºae\No¨ÚÎŒ4l®&7üýßÿ�?æáƒûígšs~~®g‹ñ?Ï’á»-¹W«¶:QDQÄ*ÜðÙOy~úOŸ~Îj2Þ铿5—×7”EÃf½D ÅÁÁRJNOŸá8†!™NÖÔH£‚®�ÓJûŒL“ ¸¼š`YûÝ>|ð7³{{ôû}L©p}Ëvð;y‘"¤Äq曕6‡«+:n·ežkm#‰Â6JYx®O–kkeÃhØD Mc»Q˜b(Ùº^‡2-é ÇEÁhÔõlª¢ -B×ÇvmM\5ÁÅàäþž§+³šŠ¢¨iª¡J¶LþoáîÜþ# ã–/œ9·­4Åëí©»Aþ.ôn«KJ‰P4á•$(j]…m Nlw&1·óª×Ïáî¼ænbüömkäö áv{<Ù’iïT[M­‡«ÓéŒ/¾úºU©ðqíQ³Z¦ØŽÂs4¸Àó< ânëU¤ˆ¸µ½Îò’Ñh—¿ýÛÿÄåÅÛñTY´0í àÑ£‡ÔuÃOþS]ÅÖ U­el„lH³à (Ê׳R/„NOOY,V úã[×Ð,ÍùŸÿÝŸc(I‘—Tµ)ýÝŸü.WWD#´tI^`ÛI’0Ÿ/‚€^¯GYfäe�ëu \�óÓS®¯¯)²œõ&äiñ9½nÕ=Zc&¤ÒÒVãñDZ8ÜÝáà`�éõÖ~—7�0êô»–ó½@ûÿ”EJ]ȦÀTúO]Q7¥¨Kã%Ôã¶ÊÕ}¥¾ærÇ!µ,Ì4!0ê’ÎjE¼3¤®_øðÔM}kM¡¿J n[eàÚ6'LJl¢ƒùr…©lªºÄó;”e…2M,Ë£¬®Y®"¦3½)‹˜Nà0¸AËr�”eÉz½&èvð}ŸFô=Êò\Ðíø¬Ã„­=}]7äy‰ïwüËU¤´¡(ªÄN×¥iåtf³‚ÅÐGzÎcY6›D{)% .‘B >+ ®k³³3âøþ–éPV9¾ï2ŸÏ¹¸:Ǻø¦¶îö=�ÍrCYÕT�¤Áàzr£á÷IÄxÊÇséö; ¢177�ívÈÒ C \×Ó ›KêFqvvÁÙ³ç¤iJ¯×#NB:½NÐEH“Õ:Ôt$Ú^pÑ®^µlÉ`ÐçÇ?úˆ«É5OŸ~Ƽ?¢³½!ëš^=Äp\â8ní�m€[F|YÔXž‰5eYÑ ƒžçLgZ$°hUŠl[ÿ³¡F‰¦ @¿Ó%ÍbÇÆ÷< MY#$HÑP M•#UC¿ë! ²¦.+MÌÚ[HJEõ-ÈÄ-|^ö³Ùþ¾Ý^�ï|[ ¿Ìï>~Ûkt«ë%ø’½ $wö¿Ý³äå²éÛª°íñÛ3¼}Þí—lµ@*¡¹.¯&¶ßë;¯×ÏJWÜa³YÇ)±=/ð1LÁ&\R׆T-&£nM£¯¥Í:ºu5ŒGXʺÀhpR­5ó^‚´‹¶ETRdÚ>`±˜µ>3}â¸A)AmpO{ël6lÖÚn; £Öâ9¿åwåÕËÈÇ(ŒùÅ'¿a4Ðí IÓ )4ªIÚiŸ™º†~w ÝyËVU¡ß#ŽVø¥‰i¬Ö Ö›%¢eÕ7UEÓhNÌÁÞˆrÔ£ëúÀ Ûáàp—“{äyÊfµÄ�P—…>FQ´²Fª!*Mê­›[Åöí÷­û.w� $ªQ,†=v/¦Ð*aôoæÌ;­^Qg©FÚöí5·U䨪‚4ÓÂÁžoóäÉ u]óË_JšÄQJMÝò¸,¼ ‹”%ד)Óé5þÇ`ÐC™6~ÐÐ7 |ß%Ï3êZ«çKÙ�—�ß8¡Ϲ¼ZP–9u™c;>YU^Ðu|\ËÆT’ªLq{=”QF+,ÇÆ4!Ëb½qÌÎNÏ6�ªÁsM&“+ÜvvV7šûÔ <*ôÂh`wy÷½ïEAÇ£i4 ¹¬*F£ÖÝ5ϰ=…íZÜL êª!+*ª¢8ãüêi+î?|€øP$yMZÔŒ†=ί'<îtéGl’”å&äÙéñ&¦A1êY,CÎÉNŒ†…4 Ý~[,©¤¢†#55ŽçÓí�ˆ³œßþæS¼ýHÿk�íx¯»ïؾ3eYÆÙÙo>éÐ QJ0ÞÝ¡¬+NÏ.°-ƒÉÍßqðÜ.üðc<·MEš&x®Í½{‡Ì¦×üâŸpzvÁîÞ—“)abÛ&u¡EŽã°··×"c®ërppÀ¯~ók„Ì–3­ÒÛšXÝÌg†äôì”0 yòä 5†e'ižáºþíʬnô>•irq¥Áe«> “4Ï(ŠL‹ˆ¶0N%*\ÇÀs´å·©ZWMCb›†)jLLÛ¢È<ëÙÔ’V²º•¸ xÑŽzQéÜULxW¾M¯þ»Aó…_Ç64¼8‚®vâvf´Íe'[yM¢ºM^hà«IðÕŸ_�[ÝR: µÉH©m»F¡jA]é–ÙË …ú¶M'…®~ Ó¦,óu™Ñïùd©Öx+늬ȉ½rUÒÙ"ž¤^õٮǠ×çzzÍGˆ2†2B�eõ—MFdIÆ&\ÓëtÉ“˵ȫ˜¢ÌØ„zuÝëõZEA®H’ Ëòd<{~F¿Û§ÈK<×çßþÙI…˜–IUVdYÎt:EJ…a8¬×!‡‡‡¸®KU”D‘&6/—kâ(eµÜ Zs3]ÑiÒfÇÄᚣ£ÓÐÕCS¡Tu‰ÀгàÎK<ËäþÁCLKR&e‘‘§O…†%P(=¼®3š²¡n*¤”²Ö׈„²ªõ ¼n´Ö- ¢M´Bhed¥«Ý1û×s¶¤àÞ|AýèDC-š¡Xƒl•6„>žöõ’ÔÔdUŽ2º‹wÞ¾�R%—“%_=;…&Ç0%EªRmÇÄv\ªR«{¶…åØ4‚ÛD·昖¾ÆŠ2#ŠS‚ŽnŸ/lEš„ÔU‰¨J¬Öùè`×±hêÏ1ét-\_2¹YÒŒØlÖø¾ËÎŽ�aV +ʪ$IW×—œÜDѨE^¢DB–¤(Q3ô¨ëšÝÝ1777Ìf3 Ë$Kæ‹úã¢lC\dÈJ[_gq…a.™ÌW,×!¦åPR1™êøÚZ�NTMÛJ”¤eI |Ö›v÷�HŠŠ�±Ü$¤É”"ÎIãLƒeiZlÂH#MËséuŠ,§&…6t¦ Ÿþ''Ç´ã’îö� ¨h'ß÷ÉŠ‚,OpZ»…ª©q\Ÿ ¨‡ß?áòjN]I~üч(C E�eI”¨ùþ÷ßå§¿úÛññ‚®0ö5Ë7ÍneÉ£(a¯mß]]NY¯×œ<|ƒ§OŸ’•³Õ’ÍjÁt¦QIW×S..ϸÿ>¾ïsttÄôjzëãò"¸ lÓÃÐ�ÍÈRÃ`MÛ"ŽC„lð‡�ñ�a¿Ë°ëóÿ±ö^?’lù�ßçœ>"mù®ªî¾·¯s9$D3Z’K.WÒèA+ìê…Z, ‚ @ÿˆ¤`Wzô¢   r)€fh–âp¼»3×µ-_é32|œ£‡•Ýwfîb*�Bª»º*3#ÎÏ|ÝÉñ!Â’$ (7HG ”@ »]xE[W(Ç&m'°mfLg#Úv«Í¿{¼d¸ÙCÖRºïâ¤_b3Zkt÷¯>Gzù=¯…ŸÅŠ^ýù³Œ:Ó]!Q�ða —‘ÿöõšã8[ßÝ”uw³ ipÕݤ£;F›ÚvÒfó’¹g/3ˆ¤�HéÐh´a±ZSÕаZ.@ôôúx^Ûá ÚæÄ$ö÷AI–ëyžãyÿëÿö¿ðúƒGß;Æs}ƒ!÷îÓï÷ج7,W+ö÷v =Ÿ›Ë+Ì¢áá÷)*‹ßXqõß1ÚFqAÄb¾!]ç ‹Å!qÒ§,kÎÏ/¨ëŠÍ&åæf“§Ïˆ£ýÞ×ñé÷F£©Ë†årÍíí5Ql#±=zÄó§ÏÈò”½½zqD�œZç„õ Ï‘ - ¡Á´à*Å0é±7ÞaµœÑÔ5±Rç%Ù:CvÔc£ã"Œ¥îKëë¾m€î¦dÀS*i›®Ž$c#ÉíûµØßññöÂï¯6„RâÄq×¾¤ð·­ ºlÛ©ë�&�ÎÏV#MÅáa!àx7“kòrE|@[6[š®h‹’(t #×÷h;RŒr/S8®$vcÚ¶F:’¶Uè¶æð`é<{~‰çòMJöƒˆ^aÚšªª#½€ããV« NNwPŽ]qºŽäÓO?âÁé±�Ì•àõ×¢�$ŒióÇn§s„© —÷€ 8;;£, ʺäÅù ÷�p£€ã0 ¯z£1vš†ËóKð1�{J¹Ô­¡,2²ª7 H"ê¶¥ª-Ã4݇{‡œžžrqvISµ¸NÈîÎ!çgg¬s®¯§D±Cº^pssÁþîˆßøê¯ÑÛ{È`0àðà€�á%uU`{àHé0™Lð}Ÿ4MÙÝÝå·û·Ù?¼‡Öšýè¦óº©‰ã˜7ßzDÒï­bÂØ$=zÄbºØ²¸À s�®È¬9··7TU „ã'!z]3èÛÂóÚÃúqDžö}ES×][N¿k³]|×vΞçÑêÊîÈÛšÖÔÛÃX¢�BwÆÖ»àsð»iáÕüÕ ¸»ÇÏ¡Ÿ�ª^ýÚ/"+ü,Ztiè /ÍLÁNCâó Ï/¢Tÿ"ºµeJÚB}Çü¤´ï•¸Ýªìîyk^Šf�]™6†0ˆÙÙÙ!‰]zqÀb>¡jÖ›Ô¾~XûUkÄ�rxïˆUšÚ¸xÏãìâŒ4KíŠMþÅïÿ¼öÚC®/o8{qÆéÉ ï¼õ.çggÛ×Õ&˜zTeC–£À(?a³É¸8¿áÝ·¿ˆïx|øÑÇ´­¡×ñìéðÀîîcçç—ÔU‹Ö°Z­ÁG}BYæô“^7‘YiAÇDQBUU<¼ŸgϞЋb~ý×~! /ž=á�wÞAÁ�>øY¶!JzÄqˆtëõÚæº”‚:-@œ$„¾‹IlܲRÖn¿m›hk$Žt^æ: ;I !laP.®ãã(�šÆNC‚Î&É €s×gGÄë BØ÷t0›“õc¤y¥ùè¢I”R´mmu/Jâ*Ù]#Ñ64Å ×mé÷<Žwxvv…rZZ- }Ÿ4 Á}|OÒ¢I³5ŽÔN€6›4%Š=‚À£ikëŒ8UÅxgŒëE ÐA‰£4›bCe išÓëØ ’–Õ2e³^àH�îV’OŸ>¡™Ïg”eÎÞÞʵ„’ñxÌ“'Ÿ"•O•µä¹f2›† W×7´OŽyïý/0Ù¼²õ|A™f”½‚³gO¹¾™ =—þÎ.Òq;F°&Æ;¸ïÜ\ÞpuuƒAÐO†QH <Úª ˆŠå‚å*…¶F ñÑ9«E`c#¦ŽŽøÒ—¾Äôá/ùäqçŤ˜ÝNX.f �5|, ®¯¯1ßø&×××üƯ•7< ¯Jz‘G¯’çk 2»àû.ǧÇT•N•UÉx<Øî˜�±Æ*p|—ÛÙ-M�Ó‹­áhw‡ÓÓSò|ÃÞxÏUÒT%+YS’‰CVdhØuDcýæ�u�Ž£Á?þàfSë~}°æ–(Џws}}Ë:�04TUÁñ½ŸÞG¸¼¼@ªŠñÎ�÷Þ{�,Oyó�·I€þèǼóö[¼óÞÉÓ”ƒ{Ö)d¹\âû>Ñh€ëùYNVgô„^bqI£›†7Wô“qˆ#*ªÎCÛÕ­t0¦µk8`E½‰�¶ÓF L#0Âéú��hÍb§O¼ZÛëDúW‡{T�Åå^ºÀw¸§´tl»!°™ƒ~DY zɈUZP66’#Bæ“9uS¢„$ê%„~ÄãO>Æ÷êº&M ü8f¶ZƒqÐ�A I^fx¾d¼Ó£ª*ªjC>[Û3L9¬—s0ßs)7vEë»Êuí VI¢("˲®Áÿw{|®H· ›Íšwßy“£½]ŠÕŠ?ùÃ?ÄÁ°¿³Ãƒã#FÃ>è?ðøàƒÙŠÑø^@Q´AÂfÝðÆ›ïQÕ žð“Ÿü”ï~çû|ð“¹<¿æ§~ÂfS0Ÿ/™N¦P7œÝã o½‰#`vyÎó'�yôÖ#Æ{#êº`w<â7ÿÁ¿O]•\œ½àôô”²(ùã?þcz±í Û¦Åó7WSzý!~ÑÒ°XÌ™ÜÞnm£½þ�0p:«.(ª’å"e½©2¤Ñ>«UÃù圲„t]’5ãá>›,g¹X�mR^¿ÿ€ñpH[Ödë5W—çyÆpÔ'ÍÖ\]�qÿô!QÜCŠ€ÀK¸½¼¥õ˜Ï&@Á{ï½Îý{ìî$ìõõcI@S—ÔU…’ u‹ëHËV‚ ôˆ"�_þ•¯ ”Ý�dYFQþ=ã0Æñ‚†“½=¾ðÖ[ì ú4º¥®Zê¶EÐ`Ú WÁ²*(Šè2 ‘Rröâ‚?ù“¿¤6FxµL·4\!uYÙu†n}�Þ`Äéé©Õò˜‰á�G¯q»Y1 ØÛà8‹ÅŒÙ¬Kku‚ àÍ7ßDÉ]ÎNžç<~ü˜÷ßÿëÅ‚Á áõ‡÷98ÜãÑ£‡”uE>¹¶i¦eÉbVSWMU"ŒÁw¢(²n 5øH´(Ò“4Ù:çææ†ÙlNÝ6 ‡CF;–ò�fʲB�ï½d½}v�foì²´à_Óê-Û˜†¶1ÈÎ,õUi+ðT/é×wçîq÷¹%X îŠÂN9ÆRj]ׂñVóQÛU é¸Hy÷óŒ=pt�Ö†ºnº=tc}Èî0+-;ð_Re^à´-UQÛµ­r�H””èZPVaï¹j«áÑ­ ð ,jn¯®­{uÑR5Qìãº>“éŒMº$Ë7¬Òå’$! Ï%Š"¤´>w®g£¬ã8î,nì¦ßï3ŸÏq—ó‹ÜpŸ§OŸ³\®ø«¿ú7üê¯ÿÿíóßñýï|—?ü�^<`¹ZQ%Ÿ<þ”¢j8¹wÊöOþÂÀ·¿õM²lC0äðè˜ï|Ûf …‘d0ØÃq 9<¼G ó努´Í§Õõ ªVãx>AØc0ÜaµZ°X甕ark‰I<²:5?" EguÍl6A(Ç ¨‹/tÑ�A·Ý ž?» ?ˆhZE–\^MbÃd²¦¨žo£F¬?`Dœ„ôû Ž4 [œ5”Mm'' ªªyŠ#¡¬57Ó^ÐÇ È6¶Q_.7dyÊëÑJ8…-̾ômóVV¬V¾ B²¿iŸýÇ IDAT¿�‚��NNNø¯ÿ«ÿ’‹‹ ./ÎX­V|üáG,–3ŽOîÿ[ÊÎËÇç ÕjÅÎÎÆ6é†Ì¤¶užé¬Ut[S–%ÏžÚ‰¤ªJLÛâ9.Žã ´a¹\²öl÷Æi­#„F(�Jp}}MS×è¦f5_F¾�Ù�–iÎâòœ²,ÙïÙéåÒ!>¼ÿw‰¢wðíí-q˜ØlŽ(b¹œsxxHÇdEN[µT•]çh �¶ÀjÛù�•õK¡6Ž`±ZmMÿV[g㦩ì„P×ììrrï�A/ÁsÂhò¢`½XãGa*g:Zs×Õa,“µóiÓÆj8h-¦ƒ´8�T�µP«·ÆÒŸÕ}¶ø _!*t'õV ÔáDÚ 2%8Ý”$»â$„À•ÒvSZ[Ï·;¦�è•]â¨0à*�ª­PÂÙF__Þ°˜-éßPU¥Õ �‡~ˆ�=즋ƒ�ÍÁ‰¥Äñíá¼)rå±x€ôøð£O��÷Þ}‹¶­ÑÆÚÙ£Y/WÝzÉê�ÐV\·-M«) Ë«J›/Õ‹^<¿`ã[U»mHæ6è/¿Îoþæoñ�~ï÷xöü9ßûÎw9;;çêê ­� kZ­ #+ºëú¼ýÎ;Ü?½Ït:ãÿúÃ?b�ΨjëÔ€²ÓÎx<ææfÂ|¶@×5½^Höð\—$ yðð”ÃGðýïOyÿËïòðá}+�-Qà2î'¬–söÆ;/¤©Jn7s´¶OY–l6J¹xžOÕù :�M°½gª¦îH+Ý×»ËC¼ÒÄØ×ÔÅqì´Tud­5®ßýß®¡ÕÆvÎÊš×J<ŒÖ¬Cë¦Ñ¹Ï7¹m^ŒA Áˆûé’uçÎÞa”RJª¶ÙŠ¥ï®sÑ]‡®+¹xqÆÑÑWÓ%«å’8IH˜ӣC¤„Ù|BÓÂl™Rå)ž«�F$¡ß9öû„ž�ïø”eM•§ 5�ã¸y±Æ÷B²¢�f /Îniª–élNù,V¹ý�”Æ÷]bߊ9«ª¢®Köv#´rÙ¬7Lo'¤«%óÙš›ÉœóËkz½ë<çüjJ’(ҬƟ É‹Q±¿¿Ïh4 —D(ç]WxžGž—T•½óŽn ƒ>­hÝàz69v4Þà "ž={Áf³¦­ š²´[ƒl“Sd)JoÐ�ž7¹æGŸ~›¢±‰´ÇÇÇìŽÇüóßÿ}ŽI¢˜·ßxÀ¸ßãã�?æñóg¿trrÂßüÍ_óɧq¸À{o[ëmm¬UxÓÔ�ßágçÏÚ²Î6é Z�#÷�¨Š‚³ëÅÖ9ZJ‡t£)‹šõbI‹áµ×^ëºô–åzÅ&/™–s²¼¢*s´©ÂXÃá�7Þxƒ0 999a0p{}Ëp8$Os&“ ¾òÏó,&åû´º¢jl±,˲ùíM–çå–bmsE£A7à8Òâ&¨m¼�b‚5yðàuSrp°g]ÃE[Hcð•ÇÙ²Ñî?ËD{©0ïêG÷ ÂQ[CÓñ¤y¹’Øv�mûÙnÖüL2ذ>aWk¦“©ªnÅžÅvÚS[M†�†$®Pù�›·´y%Ýãnrt‡¶1(åtë·†4MɲŒº®é%=6ë”Õja­…Ô~·³"P­¡iêm±qÕIÜÇ<ö÷#¦ó™¥¼ë†M¶¶TÚî=½ÓQEÑ1î4q#…5‡œN§xžÇfµ$J¹{i A�pttL‘—G1›-ø—ÿò_ñ;ÿðñË¿òË †Cn®.™Mg¬–Kꦦ0êõØ?8àèÞ'§Ç´­æéÓ'üø'°»×çòÒ°^fŒÆ6ÅÏ�‰¢ßW G=úý>{ã=®¯.ÍxÔc8é'!MSpïp‡÷¿ôE ³™Ïì úøÊá»ßù>½^ÂþÞišÒ˜Š8öñ}—²Ôø�‹ë„ Õg‰MUfB®ëÏóº{ó1t7mÜi¹¬²�R.J9Ý4Ôv÷dKQ¦(å�®·QóºÈyºmt„�„]sw—=µÕ‹u¿çÝê»®k¥PŽórEwwï:, ÚVñÆoðâjÂíl�ïGŒF#Œi ‚ˆ °)©u]±ZÎY,$´öº“Shmݤ�v�Xç!q•m¨”t)›–tµâfºàòjÊ͵µLÊ‹–(H×–¦u�Tš““{$I‚çyL¯gžGä\_^‘§9«åšår�çFÜÜL¨CVÕx~DÕ7d“i(*ÚÖ0&ÖÙA)ʲ@)�«\ʲ Š}P’ápÈt–R• ®‚±‰ªV‡äá‡1'''ÜÜÜp;¹$p]â8f:�â{‚²ÈYÏ—d댦jI¢éDôû}dQ±^­iÛšßýÝßa0è3�ÝZgÝrppÀW¿úë|å+ïóßÿÿã¿Sú\œ‚×^{Èoýöorr|‚×eCc@Iªª$Ьá¢rýäüÀaw¹ÇÁá!ëtMÛÔô’„~/!‰#”TeA™g˜Ö†ö¡Oƒ]£½~ÚžOcwîÂt‚Ë.ïÆ®Ã,cÎp×ñui ÝÂØ‚ÕYVÜ]‘zå£Óö`,¦ãHKmUXWבÖ�Àf`ƒÙ}MYºó AlžênOÞÞEEÛšÚ樤i†ãØ|žuºbµ^o-WÝv‰³–€Q7-žg×[Öá¹Äq]Û;’½ÝuS2›MX¯Wôz Ž”øž×E,Kʬè˜8y' aH]7Hå0�LÑÚ²«²awg—0ˆh[MšfÌ Ê¢f¾\òÝïý€ë[K™Vöö÷xýÑë<þô1Æþ£ÿø?àä䯴<{þ˜¿ýÆ_óñÇ?µÓ¢1lÒ%UUÐëÅ QprzÌýû'|ñ½wyôúCùð'üøG?à›÷ &“[ž��ÿýXpiš’çÞzû ë…´]μ�€Ú¶e“­qÉx<¦ml%ÜÝÛçäÞºiˆÃˆŸüä'dŽOÇœŸ_2™M™ÎçxA@QĽ¾ë‡M]…!érED¸R±³3âìÅS>x�¦ªØl6Û܉ýÝý- n6›á)�°Z­ºØ]�².©ÛJ« ¸½½¥í¼îªÊîÃÇ¡iʲÚbAº£žš¦E´ •²ñÈ›4'Ïs²,·¾sžG•gduÙ­c¨«‚¦.ñË—7¯˜8Ò•»Õ[Û´ö@wïV‰/�HµÖ(O¡õK‡ï;°XèWÃíø9½Ž}.f{°ØDQ� •]½)%¶S�Ré(”r·Ï¿i[{Èt‡–ÅlüŽ9g'¥"Ïíádìtìº.ƒÁ€Édf£—+”c#‹ï2qÖéŠ$‰¨*k¾¨º”ΦiÈsìu—ÔZå)Žãðâì©-»» ¼¹aŸ0ˆlºfMcófÒtEÛ¼À']Û5[÷¡ôûÜH–eÄq�ªzÊÙÅU·ß¾ÏãÇ�ùë¿ü7üí7þ©ùÚï}�ßþ�ßäÎýÙu®o.ù“?ûãN!?Ī"Ås=zÀî®Õ¦ V›”¤!JIòÍšªÎI�ל°0d³^S”òtÍîÞ˜ó Ằ¿»‡Ñ’ºžó»¿û»,Wsf³½AL{Ôºd3ßÐè–$ŠÑ-T�"CÚ<Ûú.ÞámwÓÆö¦µF»í+nö¡µÆ–uå¸ ÆNUÅb¹âæö‚r<Àq¡çÛ×¾GÁx�“¬Öè-† ÏÚL/á(”ØMÑw˜2Ø�ÈW¯u[ð¢mAÛm€]]+Œ†ºª¸¹¾¤— ÑÒBJZ¼kz{Ãj}Kox!UUÐÔ5•ºcHJ„TTeNU5´MŽ”5®Ú{C×h770‚Éí”Åj�ãzEEY¼EýÞm*拉õ& œ.ËéÓ´nˆ“�ñpHa�®äÞ½{¤Ù†ÛÅ!›ž»—t÷¢`¼{Èþþ˜ñxL{,«Ü¶ KžšMçÔµÁó’¸ÏµJÑ­•€øNL2ð˜N¯9;³a I/"éE8Æ0_Ì(Ò••ŠAÒ‹ØÙ=ÀÝ´,Òœýƒ1Ͼû=v÷ÇÜpÂz=çáƒûüÝ7þ% ggg8RuNÚþÏDŸóøÜ4Y¯—¬V+ƒº1l69Qж-qg§Ñï÷ùú×ÿŒ<Ý�Ä!×ë_þâ—xûí·ñ]—å|F?ùzû§¬7ôûš¢*I}šÖð¯þçÿ‰Ëë¢$&pÞ]MÜ?¸Çz½F)—““{8Jðøñöwv ü�¦nÑ­áéÓ§œžž’¥9¾¢ëÆ®tšvÛ©K MÙК†élÑ´q³Ém,ÄÍÍ­¥ðFÈ—©£‰n*ê¼ C<å0™ÏȲŒù|Ît2!=š²D›ÆvVžB IU”â�˜EžoW`ŽThìzô­%8Ç•€¦*m÷ò™›¹Ãeì÷¾zsj­iëæåÍÛ¶(�ïã8F ʽJXÞª©H’ÏU¤éº£%¬Ö)q/a:�S65ÊñȲŒþ ¢, ²n¥)´€V£”‹ëx$¡d¹\vâE��Ö´uIÒá;{{{ìîîrx¸Ï÷¾÷ª¬$Ïs®®®èõb’Ä*þ÷ööÃ)%——×[ãL­œóÃþaF˜¶åÍ7ßä“�?%ð¬M”ëúœ�]PåÖ¬R¡8?»äøô„V†ƒ1ûû,ç ªªáÅ kŸeýþ�·Þz‹$I˜/Wh­ {`EAÑd~`_ÓÎÇl2¹�¶Áw›Õ²£“;´MIà;ôO·eßwiÊ‚¬µ´u) ž+øÂ»oFÖûkЋÁhšó/ð}k„+p0Z2�(ŠŠo|óïhuM†ìŽ©jC:ŸD!²² rkÇ2ÓÔ^÷yž³t–(¥HºÌ¤ÝÝ]¾ò•¯°\Z¯»óg¬×k¤”Ìçs°G,Ö+¢8f2]2_L™Í¯™¯o B—²®˜-gì » ½M˽‹VËÖI®‡}RÏg³\s|zJVäÌçs’¤oÁo?D©†ÚHúý>I“ô{ÌWKêºD�'mÝXº´TqLMÀ{ï½Ã·ð£1½$âözI[ŠÚ”¸aËîÎ�G¯ßgr}Ãôv‚�£+./®y÷Ý·­^dùÊ’6MÝ6\O§©X,Vììíã–Öï:ŽçRW%MS ›Ï—)I’P®×”YŽ”Qc´&I"ŠÚN~7“[†£‘Å‹š?òÉò Q”°ÉÖôz#Ž��˜ÜÎ¨Šœ thMºÞÐ4ÐK†øA‚ `¹ª¹>ŸP™¦cE6ALà»hÓ‰�…±˜žÇk§§¼ÿþû,§3&“ ËÅÚ²{7ʶAF1BZƒÏS|ÿßáÃH? É76ÆdµÎð½€ÛÉ%ñàÞ߯e™í˜<Ïc6›áH×ÚÙß1wº5ÏjµB)w °ÖEÉl6ãòòšÓã#‚ âÃ?æÝÁ!ã¤ÏÙÅ9ýáßñ��â`g�tµ¦©š¼¤rs2šØèõDAÀ»o½K¯×ãÓ�>¦×³6ꢣbÞíþ曆^¯GUض,Kª¦Ä./Ïñ}Ÿù|n;×åúòŠáxÄÎоùér…ã{ ‚(¤ª*²ÊêGåQ׃º…ù|ŽRuÕRaèã(»f0ª¬›F³X,A°ÕàóÒmú®Ð5mósì£Ï®ç …u¹p••ÂZêû¾}ÎJ"¬$·ÔkLk@ˆNÀçã{.Kׯ%4R h©ê´•­¾MÙ@·F3è÷X¥ž={A^ZŠ«ÆÆ0ßLn98Øe8v¯]�t%®tÙl,æ9Œ¢-ãðïi[› Vv1™LÐZoM;g³Ùöz],fÄIŸ¶ÕlŠš�>yÂh<`¶XãEU³X¬p]…ë´�¢žç ÎÎpmŒÅÈöwÃ�Á`ÀÍÍ al±T#­n/Míj^×C,ó‚õ&¥jÚ¶F�+m,Îd$­�xóî»ï0]¦–.|ñœ¨×·÷£lpA¿>q w÷‡Ñ0Á$®Û°·?$Ný¸G�—AÀ»ï~�‹D]ªêÕÕ•ÍýiÙÒ8³Ü&¶]¾ X››«ëkžŸY&]šmè'öÐÝßß·«ßv4u]Ûü×íĨ.þhˆ®j«ÜvÝ7],¹¸ºáp—º®htKÐqÿ‹"ïÖv•Õ"pø¬žbûÑ�ªÒ¼,2`ã,�ûå”l)¨¶øÜ ºÂ†Suú‰­Á£®ÑucY‡¡ekÙè磄°Z%Ïsh´Ù u«™Nlâp8Æ =ÒÕ?p­¶ ‚�¢iZ\Ç# cÂ0&ŽãnqѺaoo¥e^€Ñ¤«%F×ø®CœX-Xy,—KÒu ‡áI⸇§›§²^ãùÒ·+;Çñp�ÅlIöÉ6ëõšb“ãû>¡tx¡C’ôq½€6Ϩë–,[²^m(ªªa½¶ì<­5~vÖAVäwq}…6Ž=ðšO9vxš`½Z Є¾K-_¾7�V˜Ù¢q”cתmCžÚ˜�ÆU.Á G[Õa£Ó1%åVŸ&„"/+ªZóáG�‘®‹ïû †CŠ2g¾\÷#”£hª’M‘ãûvÕYl*L«‰’˜Þ o¯¡ŽMYU¶Øüßô¯ù‹¿ø nooù¥_ú%=zÄÎÞ.hcסÊnPŠïÿà?yÁëR¡µCÒRÕ%³Å’$ Ñ;¶!tôC–Ó¾P)îþ“aŸòæ†8޹¹¹áßûµ_µ«ÚùlK&±­MGNhÚñ´d Ó*]£„]×µZt 9A–¯(Š”^ì3“‚V—ÔUÍáÑ÷ßÜ£?HÀ(š( Qý€¤ç‚þ "ˆƒQŸ¶�««óùœ–”ét ŽC[Õ8Ž¢?ˆéõbâÈe:»àÍ·érA^lX-ìîîâH—x0&ÏK$šÆ@–ZŠüÝ–C”Qd#Âã8¦ª3âØ§®!ñ¼ˆ�>úˆÉtÀ —„UU#øä“瀤ßv¬^�rCŒv¬^[·ñ» JžçÌgÆÃ„8 ý€ƒÃ}ú½!›4§ª Žá40»ôGc`S„‰½¿_jmþQ‘¥Äa‚ÀyÖu‹ÿ= PÛ¶ìîîÒï÷ w�bÞñ\no-ãl6›°·»‡ã8|úé§|òø9Ã$æáýû G#ò²¡nÁõ#®//ÙÝÝEJ‡ËËKü0 Œ£í3ŸÞ¢v÷ŸžÒï ȲÝ44uMÝVW{Q‘¦)[¿·WýÇŒ1œŸŸ“D1®k§¶¢Ò|òécæ�PËUŠ��Ú¶å�×±Ùl,vàYVÒtLœv‹/ c�ñ�ј0ˆ™Í&–ÀÐXºï&+:‡MÓT¶€)§³¬èö믓m/c«�1lipwÅ+¼R|î>—ÛbÔå³ÈÏ–b«v/ÊÌ®2|׮䪒¶5HåØH‹4cµN1Ra„ËPö-Q£míî¼jº ÇÃQÖ1ýáÃ×·ø‚ãH²,ãâòœétŠëºŒ‡£N´ iºÂó´©¶BaÏó:F¥×½3ð}›Eã:>BØ¢‘ÄŠÁ`ÄÕÅ5óÙ’ÑhŒ1G¸vdIZkkdª­Š{¹\wN †²,¹¹¹a³ÙÇ!A°³¿C’D8•¢(7hSã)…8Ìg7¬7+¾úÕ_CÃ&]1¹¹ r}œî–”mX9Ö)ÚQèÓåµ­u'¸›À‰G',ÏtÙ8UYmu®ç2_¬Az\ÝÞâz�-öƒ!HE^XÝÏp”` +,þözÒRq«Êâ›J)kx#^®r¿öµ¯±Z­øä“OØÝÝÅc· ­¶ÑÍ;CÒ,§È ?þà§4µáÙÙ5ãa�Õª@“‘çE¡•Z4‡Ï/˜ÎV8Ê£×óy²;"Ës¼Àçµ×^ãµ®Èù¾�‘‚Éd²�€T‡)!‰“„²¶a€mU¢ë¶kœ<šÖ�· E¶"Ž<ööǼ8» J|Þ{÷‚,Ÿx¾+H‹¼%òbÊ¢`¡+êÆc4 IÓEUÒï�ÙÝß#+%/γZD½!yU"¤¦×9:: é…äYʓǗ ‡ûì‰Cû;oÖk|×…Öà9.B4øAH ™ª²ÅéâSê¶e™np£ÔºP—%Ÿªj0ºÁ„lm„‚õzC]Ùi_�$ “Û9ž&=¤pIóœ2Ý€TøID]Ûuá&]q{uÉñW¾Àñ½}Vo·ÙlHÓ‚"·´üFk®çsúÚë|ë;ߤ1šëkIà:Haõúü¿¤½i“dÉu¦÷¸ûÝoì¹ÔÒ]]Õ0P0š(Óˆ#3IFÉd4™I"çð§IÔ‰’8¦1�&ŽfH 7t×’Y•Kìw¿×ÝõÁoD4C5È�Ýe™7üø9ç}Ÿw…d~@ÝO º¦Eˆ1ú�+@ï¿ÿ>¿ó;?äd>åîvɃ‹Ç.ÔëdÆw¾ó=ò¢À¬V÷ÄQÊŸþoÿ‚Ͼú©F“¦5dy�ÅéºG�ñÓŸÿÝ1&úìü”$qh”ËG—|ç{ßãáÃG¬îVÜÝÝa5®» Øî÷HéñòåOŸ~H§ý<ÞRÅ'³^¯™ŒÆÇ[^•”MMÓuX Iœ’$ yž£MËêþ–ù|~,haè —ðÜ¡¨»ÆIZœž-xs{Ãóo~EUU\½yÍp˜:ºlo¨ ?ð©[7ž’AèxnÖôäpákô](OU>žhñVžê ÓÛDÒCá±ÖbÄ;”úÑÛ± õxö²n�ÂÑZ¤5DQˆï9ɳR¾ S+ò²BÅp8CyMkB9Ò¯u‹I_øÒ-³%ŠÏ~ñK<Ïsc*ßç~yÇííyá%ì6÷ŒF#tÛ÷l«5¡çá �0ÓvìË £�9M(ϧ¨rò<ï¯!³É ]g¨‹Ž÷ßÂ7_}CÛêã{àRo}šª¤.Kò¢!ÏK×Á �híÙýÎe¹,s’aê�&¹“�zþ1Âj²ÝžápÈ¿ü³?¥mjBO‘Ä!I0ˆ"L×9´r"�Nšþ2!ÑVÓ¶µ·øž€Vöiµ}ŒG&n\ФëZ:mq®,‰6‚ÎHò²d_4$Òg·\ÑXˆb�ñd@ÓµÇÜ›Cçoz²µô{r»ÖG®ïûGCªÛ½„ÌNç|»¿ ­µ$iÈ>ßÓ´†—W7Ü.— ÓS¶»ŠÑhÂýÝŠÅùϤƒ1a’2~µdØiV]KÛvœ?<#öŒ‡£žïs}õ†Ûå=wË{~øÃ2�Ü ^;ªû’¡�ÒCùަne‹¶¶7G7tÆÒé†0:Á$�œñúõg‹Æã”éxÌ>óÉó{¢P�1½·ÏÃW!¶ÓnX²¬B[C ‰£!Ó‰À÷®1¸‹°°š4� B…µ5û]Ž”¹¦ IDATIªèÚ=Öð=CÅLÇCÒ8¥Êò¼" %Jº°Á¦64µF¨·áŒ»mŽTX…µî‚`5Î#eû³À:©s]7œÎÎX¯·Ô•¥È6DÑÝÊ¢#ŠÜ¥ÙÇh¬ëš ’b}Ï]�=˜ÏÜȶÌ3š²Ãh�Í6§®[FÓMS³Ý¯�„] Ré~¿ºnÝÞSyx¸s!Ûæøa„>q:úÍ Ðÿñ»¥Üík¾þÕsÎȲ‚õvÅÇùÛŸþ”‡òª»¦nJ~çwþc¶[g¬º_oxùê5�ç£;è4`àõÍ-Nùb V&Ó)(gxÜï·¼¹¹æììŒG�0™Lxýú†Ûû{¼^å /Ý-¡ÿÂ݆š¦aµZ—§æW†n®�íxðè!¡Æ³É”ývMèäû ?p»“®­ÉÚå+”ò0Hîn×´­‹òýÙÏ~ÆÝÍ-ž/Y­j”º M‡hÝRT5eSSw.Íq°¢O�ÿ.­àÝ×ðn—#{…Ò»ÿÿݯwÿ€ïïp½¼£‡CœìÖ öû}Ÿªé!ŒF¡ïÒ!‘žOÛdEƒµX�H�Ö¸ÄY¿7ê…ADžç(å“en~ð]­7+–Ë;·Ó†o¾yÃËK¬íˆã˜¦-A¤ UUbwÚ�Mu‡ç)ªÒÄšûæó¹KkÔ–íÎ-ݧÓƒñ eÌùò³Ïyðè1�ßB¶Û²Ûe”yÁíí=Óé”&+¨^>çùÕK¢4FuuÛ¥ USSïw(ßãå«W¤ƒÏ>xæ”YiİIÙf9RºTÈG�±^¯išÆÝÌ‘GqÁW_}u”•N§Ó^b›RÕ-qä:Ÿñpäȼ‰ ™ªËŠºÌIÂ%`›m)Ë/ôˆ£¡žT¤“EQºå¬’Îk�KD ‚)cÈsªª í4ž�T}EèÌÇbò歷º·Ï¢gǹ[´þûÆx¶Gå¼SÄäAeg�Bõ»®ê¨ªaŒ[¨ Ó¶X ž3ì¶%Y–£�Âó]¡D¬%"¶Û-Év»?*×â8îV9Aè3�ðü žçQ–9'ó VF£!][ÒÖ•‹e. Jå“$FÃ!XÇñó•GžlV[¤'0×–ÁhÈ~³g¹\£DÀâôœ>xÆò~�ÿÐݪ7› ]k(²’2/(ËÝY]¹б.NCºð³$IH’ˆÑhàv�“¡[0{‚ ô‰¢�ÀSØ>F¤êQT‡ÃÑv-‘ò #\D¤iݽÓöëGÁQMwxn½8îýÿâ�nW¸ )ã8­ÖU‡ð¯ßÜb¬tû N£|�8Æ1U½çþnÅ q¼óLHIÿ3Åñ¿»a�ãe¥ë::kèj—ÓåŠXC2L ¹‹D·BÑCÓYî—ç—S¿÷”Ç�ç¼÷ø þ¾$|~Â:/ðØ~ôŒÅâ”8M¸ººb»Ý29™ñGôGÌf3ÞÜÞE4ΞÐsâ„û;{‘ËÊr—-«;´iBE!E‘qvzÂ`|ÂÕ«kªªât1£­+Öë%ãIB[wt�¦Èê<# #”Ó´ÑÀ�¢Â ¥iZÊÒ€ °FÒµÐ5%^(Ñ]Ë~·!‰-ˆŒa³½#ô´ñ BEx£«]·¥ñ B'ˆj›–¶±´�¡Ñ=UFÚ¶&ÛœŸ_à Ÿ¢nèê/´MÅ6ß #ê¦!ŽSŒÔ•&PmÓ€õ�ÒfciÊ’º«�Òº}—•î™lkF£!ZwŒ†)]Ýp%_s{{OS[Œ (›–×7wø‘¢3†l_�5Z»éLä+ÒAŠ/,J{�@èùndo:ÚÆþ{ ¦ÿ¿ �±‚í>c0œ…šÚF�?Æ~÷w—Ûå=ƒÁ!1�A^ßÜRæÛõ¥ßúäSºÎIVí׆ßû½ßÃ*mQmÓ°\.¹¼�ï‘øaˆô<"1L)Ëš¯>ÿ’éô„Ñ`Ú ,Nþ¢Ê±Ö2y¼Xpõú ÕªÆØ© MB´‘L&ÒA©7¡,÷!4u�5aÅnËb>£Ní†î'öèè&êPÆ4ݹ÷¤l®FhMÃ.Ûß/·óŠúK‹<ŽÂß-…ë¶qUÛº.J Â(B` bªb�Õóó9'³]Ó0¤,Wî5GqŒn5mUcp…(Š"Øí´{o-è¶£Ã�CÏ'¯Jg˜ì»%p~ÀÖ´„iÄf¹åìì _ýJú,W·´º¦kO9¿3Ž™LfÌÿõ�Ñ]‡òR ÊÙ„ölNUÎ�‡H5æîö Ó“SöÛ¡ïô6‚î*Š"¤§°}�ÔmÆ ¤r{Zíž7?ŒNf|ýòïxquC–ïÙ{ª.¤*2f³)ûýÞ‰—†Ò$`­òÞëgØå2Jhµ¡i5F€”î•bVÛg‹ÌN†¤ƒˆÝöŽûû–$R¤ñÕO6g½ÍˆÅp4æÉϸ¹ù1uÝ0žŒ±V°º½c<™�F#,†_¿b~zÂt8À¶–2¿Ãè–PzLFcò¬Ä—>aû]æÆp~€6–ºmÝ"Ñ 4E1»íž4"…Sy~DYµ <ÚÆ!i2àúê k;0š$ö{³!Øñ`DYw•£ìfEMàÇtÆÐiËn_€µŒ&Œ±¬×;æ‹3’Áˆ—W¯ 㔢¨ICFãeQÑ5š““£ák4ÓɈ4˜ŸL¤ �8ˆyùòŠý.ãñ£÷˜Ÿ,ÀJ,–<+¨ëšª­(Ê‚¼Ì� fó)g ¶ÛE±¥mKâØ' %“É�$ö B F»¼ Iù «B_HI[VTEáhξÂóAèvm»ý+EU±-2çŸò­n)Û?ôiCÀh4 ð}6›5ÒZ¬Ö¨~ì*�)}mïÎö´‹û»n^ßbixpyÊçÌ&¤Ô`4QàøŽžFUíÛ¡‚€®µ`¯_^‘D!Q䣤¤¬J¦Ó1¾”xR2 Y-WœŸ^Pæ5Ò*·›j:öë=—HáEQ[Ëz¿#ËsªÖ% (%�Ò©…5Œ1‹“)u±§«2„­Q”ŒÇ>ßùö‡<¡'HÓ§‹ûýŽ z´¿G< ƒ„t0âDf'CDŸ(ÙµnÔ¢¬!ô',NOØg•£ô +­�Kí‰tAè!<å¢ ŒuEP[:mÑÂ’‹Aw(EF„~@Óé~¬â$߯MS·tV#BIºZÇTeÍv³c¹\Rä%Óé‰óÇ ¤ôH“!J9úòx<¥,j Ï�4dÕ­%A$(ëŽåzÃÃÇï!µe0š -ÔmÇn_"E€í MÓѶ–(H�¦$QäX`^à|VeÅÉÉÃtÄ«¿`·ÉXœ�qvvAÛ¶\__“å;ª<Óù„‡0›Ÿ€Ð$iÈx2` CÒ4%èshâ$ ¬éˆ‚ˆ(ðzõ !òƒ>Ó ¬v”ç(èQ3⸇ ㈪©1ý^Óà¹Vk¬0xA„²ÞÑ}èZý^öKÿƒtß­qqõÂ�3´n˜ŸŒ‰BÅd2a4÷ÊA—%%”ÿ£ÃÛNÐ J9”O?Þ:òÔ„‹áÐ=˜T½c|>�³­u1èREèΑ°“Øç~]Ð69ƒ�à“O>t(™0äâÍ-AÓ��H 6)Ÿ½‡êº^Vîo¦íðe?®òUíÆY�T.UUã$ضÃ�”ôئ¢®¨š!”1LøWñ¯ ÇTMƒ•‚Åù_þê3nV÷H+\~•©N¬„F· ó³ëÍ=eÕä ž^¾ï8Œqèq}{OÕ4 ÓKG:ðÝgNíBu?9ˆ¢ˆ:í½­±¾�ò=öÅž$‰0]‹èªy¶ãl±àÉãGyÎb6åâlÁã§tuÍv»åÕÕ7ÌÎ&„è®ÄW† „².Ñü ¡Õ5.yPÑtî¹½µÄƒ§ íœ¥f0�D!J8Úwš¦œ_ž9CUP×eÝúA)TU¾r{߬Äów÷+‚Ðãõý-Jú(Qb] …àìüýTô÷ ÿÕ_“繋‹í:< yž‘¦‚("޾®k&“ ãÑÈízÎ|v‚ïû|ë[ßrÈZò'ò?zŠûû{N'Çv{6›wNA±ÍrŠ�s–GMÛ;»-UUpzz‚8›“ïöÎ]®Ýî!ŽC´ç–ªžç9L�ï³Ü¬yõêQ³X,\|CW;oIá!ççç½rÄ‘ªÒ-?µÖ4u礇.—Ø!6Tt|ýaä³^®Pžf2Œ†„JRì¶äy~ ÂÙ<`xúô)ƒ»[v» ü1ßÿÁo/>çÏ_á(mn—u{y†–ÂíLû¢W55u×éžçaÊú0º*ñ|Ÿ0 ÐmÃp”ðчO¸»CøDJÑt�‹ÊÈö(éñèѲ,#Û7´vÛ‚60tF(Él6a¾˜’ c^¾ú Ïw…nÜ�!ÀJL÷6ãé7*@777ŒÇc’0b™ßñíßú›Ík!Ïsö{—ó¾Ýn{�‚f6›qsýšõzín7¡�œŒ�7D >¸$‹³¹ÛCOžÈ”çqõÅçìva1™Ì‚§—`ÿ}5aèTs£‘ ÏJºÎ§§g¤iJDÔYC[µ”UCÕlñÁ{�/кa¿ßÒUʹãÓ”ùé '§36»¢‡„º Ï© œë= œŸÈ÷°B¸7R¸�BY–xî×k±óDQÄhâ:šÃ-µiœoÄï£ÈÝ¡¤ûbTbw†(Zß§ËËK×»Ýަn™Lœh`µZ庞ça�søKO1LTiÍfµ¥*KB?à|qæ^c{ïÕ�N»ôÛ}¶CkÍ›7׬×>ƒ$u"ÑÖ|/Dw‚lßÐÔ{¶Û÷w+’$á½GQâÏ_¾â«¯¿!ð}‚Ø?ʇ‡Ã!u]»Ü|J;o„òÇËZí°C½Á8Œ\dA×/æ­q‹y´9zŽÀsc±ã!,Ž(›°O×<ûòý·Dó_˜HzRBïùŠGI»BÔ¸ ­º®�¡²©Q¾çv?ÖÒi�0à){T®9�Î[Ó´Âu_öm`Ü�Ü~ c ßáëðïî®s™P‡"Û¶í±ËóT€ëÉ Êü“oʳúî×÷Ëû5†³Éô(��ÇœŸ]òÍ7ßpõú†õvK× æüü’ÍnÍ×ß|E|y†±÷Ë[šªv·è¦Ä“’( Üé5y^0�ŽÔåårÉ僇aÙîs,š0‰ñýMSõþÑ?ØM/n ”¢È+n2ž!¥G§Ô­BH� �ÎÄÙZ~õÕWĉb4QIÀdâêÕÉ0âòâ²b˳§Ÿ’gBx(/âåõç,NÏÑ·+Æ“!Ãñœº5XáÓtNö~{³Awª£ áèÞ�ß´šºiI“„0ŠÝ7Iñ¥b½ÞbµónI)Ùç%Âl9›N­f>�à{Îoõѳ§(k©«|Õ_r*¼ñ„ÝnÇv»¥îJÒI‚Æ:p2Ÿ‚ðh´áù‹W;Ötøž€ÐCöŒ»A’òÁû�ð¥a6NI¢LË0ŽxtyA(­îxúчtXþæg¿D„!·»-m³§ê,ûåÿüÃ$äþî ÿåõ‡¼ºú†®køúW½h8a”ŽØï ^_]ýæh<±\.1�ÆZÃhìä¶²3œœ.¸¿¿wçªâáƒK”üõ¿ù·ÜßÞq:Ÿsrr‚šŸ¸ÛöíÚ!n¤â~½ÂtšÅbÁ×Ï¿áúúš�>ü„årÉz·e³Ù¹n#tît±œ]\0¦nD!àüüŒÅ|Îåù¹Ãëìvhí¼eY¸$Î>.œtÓñ¤œôQk‹�Kɬk†C·v¡z Aн#i¦³´$ÉÝ)Šª%ò=º(F›š¦5(zŠm‰B…çÍ–& ÙïwtÆ-é±�Ö4ºÃ45eY¹±‡p£©Ew»ÝbºŽáÅ¢0q°T܇¼ª*¶»-ÛíöØ™ÒAŒEc­¤i+Šªp¼©~Ïp@ž(%˜LfGÑjåÈÕ 28ކ<Ïíò|O•çøÒ'�bl§¹½y�î:¶ë�»Á*÷!ª›’““)“ñÌuyÞœíÖuÐi2êU`²™g•‹òUÎ,©d@à»÷n¹ÚÑÍõõð-é0Å \ üh4ê�—Š'OÞ£®+‡2¥„»… Ahmއ²5e-žç…žrÝzÓ4 �Ûö濃äú¨=ðéêýþè™ñ}ÿØ}: Õô¾ï‡‘ÛýiG`·½TûðžU­ËÇiu‡îZ¬’}‘S£‘V8U¤ÐGÉýá÷:tÀ²—•¿Û‰ ‰”®³põð×»$x{ Ô�¿ÐáKJIÝähã!”ÂØ–ª¨Pž8ŽÈbm¹\np˜6‹0†ç'ÇÏPÝ4X „§ðú¸íÃïq쾬v�ÕH|„5XëÆ=ÇC+ôT@YuÜÞ-¹~sÏôä’÷&çx~Äf½ÂHIñü5Ú6ÜÝ-yïñCšFŬb¿«øêËo8;;c~:EÉÏsŠDkZ¶›Œ¶%;”€ò :k±º…²Án :ã¶é�RX †µA E8Hû±Öh].=Ÿ8N�gÐp8d¿ß“ç96‰(ªŠºq$øýÞÙAN/æG%›@S— épÂdŒÌÇ IDAT<àñƒsŒ1¼¾¾Áš–¦-úŽØ!]ððÑ%U¹sÏd×°ßm˜�' £ÿ✪©ùò³Ïñ<¼8GÅ1¿zñ’ºÒ$Ã)“Ó«íŠÄ“ø�â³_üãÙc-ßýîwȲŒ‹Å9I”2Õ¨¤î,@XƒÑEžñüùsʺàîîmàéÓ§ü×Ïž„>Ÿ~úéÑLUUÿןýKžóùœ¢(Èv[<©øÎ·þ ëÝ–ÅbNö7?æë¯¿¦¨JŠª¤,j~ñù¬w{â8íñ,ΙïyÛí–tsw{Ãæþžtà„“ɈN7ÔMé\Ñ�S„!Ýd0p¿Þ •ÏÍêÏ÷ñúÖvŽÊÝ4­6Üßß÷ÆÕè8ψ“�4Š©ë–ªªÝ¸±lvw% }A§¾çsº˜òàòŒÙd@è{(Ï%9v¥3¥ŠÎ�<ß 뮥( l)ÈöéhèàŸB’ø¾ô±ý‡óúú5UU3ŸÏûQ ß/<F£ ñ ¥( „´Ž"<`L‡ï+ÒaB×êºt¬·¶¥ª*¢(ìGŽþpxÑ îÙxÚ}@ök,šý6£©Z<…>¶…8�h j©¨ð¤ÄHE]”ǃo<™3LfdYÆl|î‚ãTDÛZ6ë½ÃÙ÷8wkUÛ ¥d—ïð#ÁødÆ.[£±ìû.ïüá9^àr“¬q¾´Abœ{^õ)®Òâ!±R¸ÃÍX×)·[QôdoFkšºîÿ.Óiò<'ˆÂÏd0ýnðP˜ê¶é¥$öØ]tÖýŒA’rz2'òƒþ5{GaLQµû^ÚšÎEbxýaÓYÇT¢Oî»›¦=x‰¾r4„S J@*å†ý!Ü騷¤t? =¿?Ý®H{mÿ’ä‘)è ‰çK¬ÕEuÜŸé¶ÆÒÒ$æÁW/ñ­ëP¬1¡Ïýdˆ´c�UØîmì»ïûÇ, €®©±¶7ɪž£¼“At]/YSP>WoV¬6;£1›]ÁìdÄr�!UDU¶ÙŠO?ýˆ/ÅfãH)û¬$IÇè‚(¥¨Z¤ È‹†( h[ƒ±Š¦µŽ3×t -Aa…çL¥½Ü¿3%Æ@–× NQ+(Š߃¦Éñý]kBéÆêéhìžïª¢ë4÷«5¶ÓÜÝ/‰“ˆõv‹6-yÝðúõÖjÎ߈Ö8[…Ö-V·X`~2u—¾í#â_Û- ï½ÿ€0THíûÎ:`š�aÓµ5¦©)ö;Êí–óù ‹³s:¥øóÿû/ÉÖ—ÅTkâÖ]¦³¯^½À�Þg·_ñøá%×××lÖKörG†œžŒÙåoV€~ô£1›ÍXœÌyþ«¯øìËϸ_-™Ï|üñÇ|ôôÏ_½éÀ%‡æ…Û Ó!³™ ßòŒ[. ai´&/*Öë eÝâû!AœOÇÜÏóÜB¼'ïv;êºvÌ­8&¦Ó)^Ø‹¤í÷¶ï^ÜMºÈ+vyv,®ž'IÓ´'‰xžÇ`�еp{{KUÕ$ÉÀºC*Áx<…Ö͹ëòÝž¦¶ ‡Sšºãþþ ãñ˜gÏžáù’õz‰Ö–ùü)"’4"Ï: d¿«Ñ­FùîC>�hbc0FÇi/ŒˆYßÞaëŽÑé©#,ÌfS–·wÎLÛµ(%H1Aà–åÆôb€NùVöc( (Ð�KêTÊÝÝ$ï(ŠèdÛ“±C'NéIß¾ïã‡Á‘^pØ !úÐ4ƒòÝÎkq2'Ï2¢0<>§Y–±/^ÈàpIM?Jó¬{ý‡®@úm»_£\„ ‡n&Šƒ_ëx£µC÷sNò’$9ú¦Š%ûð=ÞÝ…�Gž»ZGëv‚˜º©�Bððê)\Ž•µðúÑ9žx uü]ß}𖢄Ä뿯3w»ÔÔC qg‡Ð3Ϋõâå5W×7F!W¯oùäÓï°Ùl¸¹{ChMšŒ‰Rg4^Þ¬Y­wd;w‰Ù¬·¼ò<”² †‰û�¬t„/rÝœò¨êé)ÚÎså ¤’ CZm(K×­· l6¤…²,bIÁlb­Ë…jš–¢§G¿xùš8Žy}·¢3-Ë¥;ÓјX/W¼¸zÅÃGçXcú`Z—£u:ŸñäýÇ(Ïs9iUI¾Ó$IÀd2¢(3B £Ñˆ$ñ/.˜ŒGtuÃýfËËçÏY\>À�cöE�”‚A ¦Â$e]¬}é]­îùþÇ?àúõK„|óͯ8??Çt‚ÝnЇߴ}ôÑ37^Ë >ýôSFÓBÁçŸÉ×ß|Åx<ä±½d³q2ì¶* üÁüçç ~û?àë/¿8 'Óíœð]Çÿ‡Ä››;^¿¹¥ë ‹ó '�^Þ‘ç9×/_ððáCž~ð>‹óSÒQÄOþ3Fƒ„ývÇz½d³^²9¿àÙ³¨ë’¢¨xï½'n¾m4ëõ–û»US³Ër4.J¶p²8¥(òãL¿éZ·'ÉÜîj³Ya­åd2åáÇÜÝÜSdMo0�RVÛ Q¬xòø“é€él€šõzES»!%onoCEºB¹ÛeÔ­¦ªjfósîî{°©k*Pǹþb~ââzÛ–ÐÖy|öEvTt ‡Cê¼7^ŽúNHXîïï]v�’t­K~=ŒYâ8f·Û9JEÓ†Î_µ^í©ªš ˆyõòšÙlÆùbNXÖ÷K¦ã®®ß!Ÿ~úmþö'¿ bêúŽñxÊi_ £¸››;®^Ý�ÆÎDWÙQ°}dzÛ¶Äa¾OÙ,æ§\ž�‹Å~¿?î‘TàXla±Ï3üžf~‘v•S0&IB×ul·[wxÕeYö#jŸ²,Ý®×­ya„’ŠÙdÊéÉœÏ>ûŒÑht| ø{`çFºcì! sœk<õ;ƒï)´îð•ÇìnŰ/bÖ‚V‚ës76J’ÔE†Ó1�NÆ]Œ¢w²«Ü^ ÀößW“NîÞÔ5žïÄ i2d6OYn¶X©ÈÊŠ²nˆâ!yÖ2?½`¹\³Ï2¤ô•ÿWÏ #…¸q¤z«A1x”E�¯ò]Žç f“)É å›o^0�Y®s¤ð]è�žhÝÑZ7m©KR�m6XyÖøª¼@RÕš¦.©‹¡Bâ�¢1-cX®v¤iÇÍj‹ áhÂívÏI«é„¢ íù.ª¡—Ü+¥¨ËŠ8NiÛ’ý>Çê†ï~ÿ{dYF^,ïî™/Nñ$´uÍ|1ã—ŸýœËó ž<|Ìh4&Ûîøä“oñᇳZmÀSH±a2?å£ï±Ír¾zþ‚Y:`1=¥©K¾÷½ï²Z­¸ººÂ£ñÀ}¦Zw¹ Ãè×0iÿÁèÕ«Wî–b,aäsv~Ú/M[6› Y–±1Ûí–@9Îb±à?ýOþ)qèóû¿ÿûܼù>ww·cÒ8Z�‚'ï?å?ûgÿAà~á¢rØ?ù_þgö›-ã4áýÇ�xpáD?ú‹ÑÕ ¹�ëëkNÆ#Æ“ ï½÷舱ÖrssÃßýâ—¤é�—†»å=×Woˆ‡#|%i»šÝnÃzµE*ˆÂ!-ßúÖŒÛÛ7tÆ¥ûÍfs·�麆ÓùŒ­ç³Ýïéºk:¬®1�GÓhãqw¿§kJwÀúF[ÓѵšÑ(á ]ž‘åÛ}É`|ÊbqA¶/hÃóûW.O{Ü-\^žóêÕõ[�OÓ0™ŽISWl^¾|IôËds R{ǃÚÝÍ}½ÞÇî&†âˆ†Ép8¦© JyèŽ>%´c»ÝCÒ5ÝY¦ãâdDÛŠ/¾øŠù|În·c¹\õ*‘IA]·dÛ%¾çÞkc;Â0 ®Kê¶D›�®«)«üX@¦'3çcæó ÆV»øH&�·'3�ÁX�5!Ým[kCÓ´ä¸x÷áý~ÄݸߪÄàí.å0æ2æmw`úñ�ß«¹Zí°5‡ÐÃ^¿àT I3Jöë~÷œv¯UQÒt-º3(ßʼnË0@¶š"¯ ò²`_ÜÄ)Âú,Î.ð?…±Â‰A¤×F¶Ï51ÆÐöÊ Hc—ëå¢ä;¤p”øÑÈyÛš¦Ã") '>’Ê¥@yGT’n]Wµ­1Fôû£®vRrG…½’4ÀYÕp·Ú ½±’í>çvµF)+$mgP�ÏË×W4º!¤,ÎÎ�éé‚—/®ˆ¢!qÛ(æùóçüÖw¿C(¢Ù”óàŒñp蔾mËüü”ÙdŠzú”ùxJ]×\]]!­„¡»œúAÄíòžóÅQœòŸÿÓÆÿùgÆ0ˆÚ2J %xúô Ú¸3ôtq«W¯xpùy踕Âx>ð�+BoŠ’�år‰Dðôü)e•cŒ …ÚlV4­›c�ìîpUUÅ“'Oð•à£�žñå_ð§ÿâåé‡rssƒ1ðìã�°¾þúk‡•ŽŽ·²ýfËGÏ>d2:óŸ’¼y}Å�ÿê¯9»8#»,”,ËX­V\žŸ±X,œìV¹èí²,øÜÞ/Y¯ö¡¨ÚÖíT�”UÃz»qäæÑú”ÐÑhÂh�ò‹_ü‚l·#ŽcŒíPžàó_üœªj°Vàù!“éDKÛ•¬—·Ì¦!~ LF½|µ¥¬+Â0f0R–%~ @ø»mÆõë;êÚ"=ÿòܬÖL§S”tû;j8Yœ’ †ÇýMžçì󌻻wãè%ÐÛmÈt6>Ž`š²Bc¹»w¨ž ˜Í&GÉ´£Á€ÕrÃd2£ŒHBÍò~‹çù¬W[Šm†¼˜;ykÀJvÛ=Ö*ÎÏ/ɲœÑhL×iêVST5Òwû�ªm(ë†ºÔø€AG8×Öô®딉¡"Œ"¦Ó!�ß{Èd2[¹åµåIB_>Ö:±‚1Ê%¿!1NÖZ´8ÄM{ᣞpâú(‚Ã"_��ÒEMtõq$Ôé~d×ûqÅæP¬·èÇUC£¤± ’´ÿ|XòÖ¸Q•T>®xH¥(Š¡?¦í´ó†aÉö%± ¨uÃd:#ŒÉJÓ $ºëƒ}'68UÏ m[ÚFcj'žˆ’„Ñ b”:Õ«¶†$IX¯wxž‹´0î‚n;”rIÃJâRzµq{7µZ �¯|üðm’q[7XÏ#/:ªzÉ~¿w�vQ6N9>ûbO×ÔLNFäeÉôd‚ï)÷\D1w!HÓû펮m(ó‚Aš›õ’8JÙí6žÇäá“É„4Š&)£Ð©Z]Ê€Á�bòªc½Ý�e97oîˆÓ �<º|Àû�Ÿ +Mg UQÅ!?þ«¿æƒßãÿ%íM~-Ù®3¿_ì}ÄéÏí2ófæË×d¾^$Eñ©È")ÂT¡,ƒšjì‰þC#ÛS� xd¸`Øð¨¤ªR$Û°$R-‘O$ÅÇÇ|möyû{Úè#vDx°ãœ¼T¡x�Äùòœ›çÆ^{­õ}¿¯,Iœ±í�!8=9CŠÀt—�_2’ûââ‚ÅbA¸žÍ`¨çñýþ)'''ü�ÿýÿÀƒG1�¼ñÆüîïþ.RlSßj¤¡�“û;»¼óÎ;üìg?#Érм$z¤YÁ2Š1åŠá0e<“Æ1VG6ÚšÕbÎz^óñ‡?'�b>O´Áu4èã{!7oŽq]�”e™}ªtLtšßÿ„çÏ�°<—8Í1U…ë8[…�¾1×´m�ïÚÛ1„mÛ$QÄK/½Är¹äèÙ3–«ÃÁˆÃÃC†£ •*X­æäEŒëIâ4"NÖ!`@U6\^Îyþü9‡7ö�–‰ãzŒÆ—‹”¦�±XÆÛýƒR´úà û- =lÇdgg‚´-ìRSŠ7²Yß÷9<ùˆ‹‹IšsãÆ ß'ÏsÂ0Ôø[û(Â0äòò’‹™67ÞÿøÎ/fìîßàÕ{¯ã:Q¢Gý~Ÿ¯}ík¬f—Z=GËjµàé£Gøn@¦Jöwv™LÇÔªâ�7Þ@‚ù|Ž”®k`HÏ Èr…R5¦åàû!y“W:Yu8ž0è…dy¤ãš– txš�„eY°XÌ9¼~!4‹Ê´ ê¦D©SŒ†!�ár|ü”^ÏÅõG(¥Î$.(ªÓvI³ I©R aRU ¦ébšÂÔ¤\a˜�ÃÅù ×2Y¯ <Çb5_`ºq¦“7c‘ñÎx›]4ìkãmép=U”8Ò¡°*@ˆÎ¯â–¸¶‡ïØHG’Ç qº!Y’ÒT yRàZ.—ÑšÐÓjÃ8ÊXG+Ê¢ÖÅ»HiS·’óÙ\wB�a“,¥ii‘Ѩa˜XvÓQ/´ A˜&A?dwÊhÔÃ2%M«‰–¥Í¯mÓàÚN7¬;t�mK•g:ޏ¬0¤–÷BsÅÇÒâRïêJ£QLi"…¤.ëmèÛ¦;P­¢ÞCjr…B µÝóH~±0)¥pCèÄPÏ}áŸR�÷Gs3¢$&/µšR‡‘鑜Ɖ킹­Z¡»*£mRPl +”eA¥J¤Ô;+!yž3�t”‡jöG$IÂx8¢ÍK¤ñâ=7š2ÞÊE¦GNu¥¶;¥ºn]À¡aˆ.aVn™�Áî³SŒM¸�·q,%ê.Vm]QW­êâ(šǶ±¤Í›¯ßáþÇŸÐ DI‚ç†d^Md…"Ë5“oç½>M“ãØ—çsJÕ�åz„¼ù^ª¦Â5’C4 jêZG¶Kà ðz^OwŠ‚Ž%©%à¦Ü|hµšÙhÙÚÛeš Œªë¤’.ÒBн¿êù.£Aˆi $PU�gñ¸ªPU‹!®íQU…Þ¡y6»Ó1YQW%µÊ¡uyç�×O† BŸOîßÇ&—óRš˜¦Eàx:‰Øq}Ÿ$^s~zB«j¤!è�TJ‘¦1¾ãc”5³ãsâUŒø´–É:Íxv~ÉpºÃþÎJ)fEÎòòœ‹Ó \ÛÁ CŒ(–Ë%×oìuñˆ8�xøÁÏ0-—8É 5±l-®øç~ý‘Ü3Â0¤ª*NÎŽq­°ÈóœW_~…Ét—~¿Ï_ýà‡Û,ù££#=]€|Ûê\ø‡ÈÙü×8=»àðÖmÞxûnݼÍÅlÎ:Ö#Šõz…ãZôú–P¨¢`9¿d<ÐÛÙ%ÊrîÝ{ƒ~?äÑÃ,æ+gYÛlš2ÏtÊeZR–5RZÌæKÜ^@¼Ê´ÁÕ}ÁãÚ|��] TÉx�õzÍt:%Ë2nݺÅh<Àó�ëáxA÷°ÇTJ+FlGpíú.y‘‘Ä-:êÁ÷úÌ—&�V[©¼¢-ë(!ÍršL¹î4}—éΈõb@™å¸¦$«Ê$Æ üN*Z°\–[LÊåå%;“év‘eÔÍöß¶°ZFL§Sn\¿‰4 ’$&]Dy…ªª¬ †ƒ)û;ŽÐÔO1;ßÂl®óvLS#7@’— ©ŠÎkÐ%iQ‘ŠV›>-ÓvÁh¨ëiÂpÚg4a[–¾-†¦)�ÚÖîbÌF«¡¦i#1�ÔUI^– ´OÄu,ŒŽÍ–¦iGl>Õ«fÎM÷²Yºoü'›x‚MAÙtF¸Qlµ5/ü7âÅŸohuXžcih�dž¿ñ I))Ò’¢*©Û¶ãÄRlßÓ¦xjé kÛ¶4Ý{ÝìjšŽßæ¹þV¡×¶Z‚_UÕv̳ª¬âtkO؆òÂT×õ¶#Ùn0Y›L Cíó©Òìž]b•Õöß»qâÚ™weçäº.5–4 ƒ€U—‡¤ºŒ¯/|áK¼tç5æË%ÿÏÿû§¨VRc`;:âÃõ¦l9:zN¥Z„ibXçç—œœ�2[ÆxÞÐ ¾¶®ºQe‹-$ÒvŒF,kÒ¸ Ì3ÇÔ]¾MÛhÉ> mÝ’WJg„ 4|Vj‚‰”`šZm},K›qMK ƒ~ #³ëºB ð}ßspý>gç ÖË•&“Ô ¦e`›×’(Spí`‡2Oð›/¾û¶-ˆ“5Ÿ�cKŸ»w_×ݛԇ³“¯ßÐû8aðæëoàyOž>åüôŒRUL¦SnÞ¤Hræç—HÛÆð="U ¤Äð=¾ö›ßf¶Xðøés²8!O ‚�)E’rûõ{ä•¢-ŠmlÈ`0àÞ½{�Ÿ’æŠ“Ó Z!ijô>}áÙú/.@G§'H)ÙÙ™0�Žùþ÷¿�kÛ¼ó+_è–Mzãû>Q´b½^3 8ØÛe4!}³ =¾þõ¯óÓ�ï°ì2dŠ¢àñÓ'¤iÎÁÁžc“%1ßÿ‹¿do2ÄPä)Ÿ|ô1{;»à‡_\2ŸÏ©ëŠ—_~Ó4QUA]VÖÃÁvMz½i6Ã0°OQkØÆðG�ĵ.0¥AYf”yŽpttDQæÜxûîÞ½ ÀÅù)ƒ¾¯,C/QÛº¢©*2U°Ž <ߦnÕVÑ3›ÍX®STeèCíÙijAÙ Ç]”j¨”²]FŽ&0ˆ¿³,·m‹³Ó\•3�iÚ†,É5*É÷™Ífœž_h<‘­ý*¾ãѶà8.†Qâ:Žm3�X¯—dIÊr5§,KV«Žíáû=Dë0Ni”–ÅF«˜ºÒñÛ°±L�<¯˜-"ÊB'̪ªÂõ{()Qu…! ÂÐ'èÃÑ5µÊÀPìîîêhöîÔÚ/Ô9¼}W‹ TYB­‡Y<×€Ç2Ó¢_�QÓëÆhмÕé°ú°nhh�ÂBMî§(›–ºÑ‡}­º­^Ò£o§²‹nÛM<Æ/f6µW07z¹®/2EYÒZ�­9‰žíl-mÛRÖŠ$KuÇ%t -ÂèFL/öI›Â \1ÎjÿQYå4­‰�ú½lð6eYR•žïl÷SYªA–Ò=}FÏó·ÁŒáÅæutçm¹l‰öFŒ°I/ÞlDz0|ŸÃÓOºŽ h[–·Žf$n]…01MÏÑé¿¶)±¤‰p=$Ïž=Ó0ÌWïqüÙÒô�(Ê/Ð;Ö8Mñ}ßsé÷5€µóE¡»šm°Ð»D…aø¾Ë¨ïiJÆ`¤­ÉY–áˆX'ÇÆúPGß_hëŠ�Ý)õÅU ¤ØV‹@!D‹i6ؾƒçê÷cI‰eK$-®«Á¶Ežê"èy8®Í¾?E²mXG ê2Ƕ\U²ZÌ ­øÚ{¿F–¯¸œ�‘¬.É„�ç[|åK_àý}¨£gTMEŒ‡#ª²f:�âº.É:âñãÇüà2d®P IDAT? n~å‹¿ÊÝ»wi,ç T%‘ªÅ°yš±Ì‚�)Ã�^{÷m�&w—kÏÃh¶!yúð³‹Kþ—ÿéæþ~À¨§÷‰‡‡‡ì_ÛçãŸ}=þÏéén¾Ô ¸¿tÚ‹¢ Ic„Ìf[×õFIcÆv1îº.Ÿ~ú)»»»ìël�ÅŒñxÌ|>gï`_+8¤v“W*áøø”8Ž }�éxÄýû÷±ßz�û»„Þ€‹‹ 0-Còꫯ¢Ê’ãã§ìïí鑟²\ÎQJ«RÂÁ�^¯ÇÑñçg—øaxq5 IžgÝø¢¥®�BÉ2ÂÐe½N8¼yc»t.Ëßw5R#Z‘¥IÒï÷ {d¥I•ضÍrSÕ wÛ%åDk-OML B«ËrÕ2Ÿ-(T‹ë„x¾‰”úö�çz†:›Íh«ÚŠÉަIŸŸ1›Í¶cNÐ3ûÅbÁzãyÞ¶r­nqìè‚dJ›³Ó M)è ©ý~Ÿ¼H™Ï¬× u Ñ:c9Œˆ¢Œ"WıÞÏUuÁ|v��6Žía˜žçÅ&yšê??Äõ,zƒ�ñd IÛž@ˆ’(ZvPÏŠ<+¶‰ÞStKo¥”þûLS§êÖ5�çA£¨ª[š8ŽV®“Ëåß÷õÈ£;ÌëFКÝȨÙo:!ô8©®k Éìü0WeM+ïÈz£I†AÓtê±îÿߨA-ëÅ¥Ìq’8F•±ˆã˜õzMÕue‡¶ñ{Û…lJ7*3¥ô®¤T%¦çlGyz¿`lßwÇz´Ô©"7E&ŽcŒž>~Hèz û=úýþöÀÞì›6ß÷f7vµsÙ,æÇžK¥¾ç¸ÞÅœqV ,{[ÄÒ»¯aÛ&E¥B«ªBZ&yžã9.QQ+½üßÐ7ÎÏ/I’Œ^g#hj°<)-Vë˜ããcúƒ�fªŸë¦58›ÍùÛŸþœ´l�Ãwõ˲$½^Àîî˜ñΘÕRã¶lSÐ`tÅ»¤ò"‰Ø6-JK1˜LHòŠh�Ó´ ßõhºÏÉ`[&žç"(UPE Ë60e@ÓV”y 4ØŽÞ5­KÏçà`Ÿ4�X,FK­yö¤ È"Þ~ó5Öë¦Ë”ÑðÙ§³Ž2<{ćÞÇ1%Yšrû·ôDÆqð<�,Nõìîîrýðû×Y,xnÀ¾ø«|þÿýÏqqûV*Çi‚^Bg)Òññ†=ê,¡Éú÷Þ}“¦høãÿøŸ8ùü3âùŒ^ð?úÑ�ÈŠ ,ƒgÏžc˜Ë´)Ê–¦iÿ3ãPù'ò€\×áöÍ[ìïíâ{>à do²ƒ0 Fƒƒ^�,‰9?»$KR¾õ­oÓ û8^@ÝÀ££ ÊV²ÊjÆû7¶�åüÙ÷¿�å8”JñÙƒÏY§q¶¦¬KÎf'GØ®R–-¦éQU0ݽŽéô‰SÁO~ö˜Ubs2S,bIQÛ<~Élqcï:q3žLh%”MMª ïÜFXÛr—IoH•ÅDÉ »/‰›ŒÆǦj¯¾ö6÷-=TÚ`&*-0jÝ­šÀO~ò×Ì×ç|öø#¾òÍoŒ&Ô†Í_¿ÿ3>úü×Q+ Ûö±„M]ÕÜ8ýry@ï½÷¾ï“$o½ù&fG 6M“GOk¿ë±¿¿ÏÃÇ�X.—ô‡À@5 I¢]±lÅÅÅ®ëz>>äôôTƒ]=‚ˆ£_úÒ4f¿Ð2éªÌ1¤À BÈ’á8`4âvqžëºAè0� OÃi¡yÑ) Ã@U%†)± ѩҴëüÅ~Ʋ,,Sçæl#£[hêk#ÞH]­.±Òó·Dˆ4ÏX¬V,VK}ùàÅß½Mˆ½â¿êwÙ|ý]’õæ÷6ă�JlCÁ®ëÕcÛ ºã݈m£2k:è'Í‹ÛMû�}]%k›†A^½  {}f¹þ¥”, ®_?@ÁíÛ·ù�ßùžŸ<çøä„ï|ç;üÉwÿŒ£Ó¢4áøø˜§OŸ°! ™¦ÆÞ$qÅõëS’$á'?ù –Ü»wO/õë†õ*æäìœÕbÅ¿ùWÿŠÛë%öî.µªuFÏ·¾Å`Ðãé£Ç,–—˜BÇK=%0 Mö÷÷YE�a’«š££çœ_\ò7?ú ßýÞ÷ÙÝ?àƒŸý-¹ªù—¿ñM†ý>·nrô¬A¥‰Þ!…!Üÿ˜ÇÏ�˜ìî1Ý™ðÓ>`ïúY–‘$¡ïâ{ÚHëy£Á˜²((‹š,×Ý—ç;´MÑy¬,¥]ü{»ìîìY’sq9Ç 'DQDYd¨BeP MÓâ÷Ýî3´èŸ1Ëvi ÓõyøìSÃ)^?D5n/@´Ptãÿ–Š£ãç¤ÙаßCX¶¶rd9ËË97_"ð=.�2¡Çùù9×v40×0¨µ�<}ú”Ãôü®ëE+6Ú¶mõDZTUÃh2¡#2ôoضIÖ Ë•&¯¼öÊ«¼ûæ=¾ý_ýk UóÆ›oó_ÿÖÃïÿ»ÿȇ}ÄÑÓ#í×»XP•ù?ù³}õë-@·|ÛÖüöoÿ6;“ ñrÅl6ãßýÁï³\¬¨ëZþYÆb±àð–Î_m7—•`™Ú0—ÄkÊJ°Œ®˜…aHkèÃq2�2�N =WGkŸ_êtÊ@#wŠ8%Ï2.KÆS =¼uSó´ÒÛvq\— èiye§•�ã˜yóù³çµ¢nZLSàXy‘wszŨÐ3L/ðñÝ€h�±Z-xþüœªÎñ|‹·ÞºÇÅÅŒóóS³ ²|Åd8êF /"·½Â%‰-soôN)ô|;`9_0›-À�$iŽeÙx¾ŽÛn0‰³œ²Rz÷1o)ªr;²ÉK�ìiÓÜ7ÊLcó ÓÄõM&£1»;;ñØwmÏÁw<Û¡EÇÕµVRÙ¶V³ˆî3×fY=Þ2L©}.u½=ØuêµB•9Ò¸¶1TµbØïk‰{O³îlÛÖÐÐVËlmWwÖ˵þÙ4{;[ux£Ë{1ºŸCÚ†¶}Op?sua¿1;޳-¾ï#¥æ×©ŽêÞëõô8*M·’íªc¼mŠÞÕÝËßÅêlž½«;˜ÍëµHµ–ݘ2Ï œp»ÌÃ�k×öùðø~óÇqxöü ßüæ×YÆúYH“\cˆZA–',fKÖë%RJ...XÎ3|_�D?ýôS”R|xÿ#ÚÆÀõlËáÎl�+M­Vl[ÚɈê­7Ù­ Sò7?þ1O=¢® vww�‡üó¥*YÆë•Âñ’u�m¶öT#¿Z½[¬•�åTª¥©j†½>¦4iëa´ø®ÃârF[׌G=ʲ¥­ NŽ–øë�J5” ÀÀ¶l’Õ•gTE†; )s�Îk´5I”ÓH�¦~æâ8À²õòôè)v«ÑS–eSF)ÂviZ¸yû–ÌVŠVúymÝ h¸8?§íÂ_¿û*¿ñ�o%)ãé.¯½|Ï ø·ÿëÿÆßþèÇìîîâ¸Uiýòhó |ï{ßcow—ÙÙMÓ°··ÇbµFÛq IÐ Y®WËÄr̶Ŵ­_x¨ƒ àÙ³gÄ xãš6m‹ñxL¿ßgµŽY.f\^^’ŽeÓ4-"Ã`0#0è †ŸžñꫯG AÐÛν‹Jé×íõ}Fƒ�^’ñèèÙè…©î$–éP–ËeLàOh(JE�¡wI^�(>a%xa�ªMˆóЬZtTƒœZ•¬¢œþh—(ŠX¬b‹õ6fbww— h;†ïÛ,œœ<׎�¬£¾o#dyB‹BŒÇ¸®Gm+„eàõwQMM´ZS¤Š^ªÑB†½½kÌfKÒ¤ ªƒÁˆží§—dEŒª¤¥÷A«(b�Ä zzWµÙ9®ù"ÜLÕ˜ŽØJŸÀA¿§½E¥.2�êö†d‚Þ]˜–xžgMKch™vÓjk©*©?�Í^Æè¸mFÓâXöV^®¶»Æ$ЉVkz½¾ïcK›"Ëq›½�ýs°Z’W%•R,—KPµæzuþÕd#ÅÞ(#ÿî¯M±Ø F”RÄq¼-äF]—¦é–/BçT·;Úì{6¯»ù;7gó÷n Óæ=nº·,˶�qqãº.×®]#Žc¾úÕ¯n=JËÕœ§ÏŸóʽ»,V F£!Ó©$éR�Çæ•W^b0ðÁ?coo�7îÕÛçuSŒðþß0Ÿg rNNŽ8ý÷ÿ�ªÃ¹®Ç“·Þ ûË¿$Ëî|)%{×ö899âñã§|öð)NßcUÖ\œ]²¿·Çµ½kXA%$žåùógDQÄhاUëÕšÚ÷É’ ×u†$ [Æã!Iª¨ªÍ4ÄÄ@iÁŠ4¨UI–¬pm‡—ïÜæÕW_c±Îù«ý»„†‡íô‡=T•1èù´u¦éý¶ mêÆ U�— ²©¶jÎ$Z­bÚºÀ÷,hÒl0ë–þÀ£*$žðøé1e®0ŸÞ`@E¬— |ŸA/doU”˜B’§ ¦káx®†�NÇø�·Í ˲ Ûb»!Ëõ¨ZÁîµòF!‹F)²²Àêô–!¸8=Ã2ªiõšˆ�¦||ÿCî¼ò¿öÅ·p¬ÿ–~ú¢(¡(Sš.ìñ—*@¾ëiFòÝï~—°SÆTuÃÎÎy^v¦4=úúáÈÍ—n3Žq¶mb9…Ê {ÔuÍþÁ¶#Aèd%|øáL&;,W „0¶�q–-YÌæ$YJè÷ñ-Ñh�KàùX¦ÕÑ,³%/jh[òª¤&Á0]拈´(hZ‰Ýñ»hu1––é2è§.­ªY.—­`wg‡étŠí˜Ø®†•J£E55‚¶‹ô­i»Åµ”¦NB5µy±n*}kGs³òJ{Šª ÏÃÖžžZûh`I?t �~ØÛâlâH‡š…~€o9ÛÂÙ¶-YQh˜­uÚyA*ôVwÌ6†¶…asÈo:›MaºŠà¹ú瀭ê¬(õXíj,BYêÑñfTgY•ÒE³ªªmÂéÕ.hSl6Eéªuó>š¦¡iu´Ã&L±ßׇôñå ãñ˜(Џ{÷.e­A©iSßøÆ7øüóÏfËs”R nß¾‰”’ó³3<üŒ_ÿõ÷ȲŒÕrÉùù9 ³€„¬×– 55o;6ÕÙ—ñ†4ù?lƒËŸüX«Õ|ŸÃë¬Vú)ew^9ààîë, ÚUÌó‹KJepóÆ!�°�ŽËçqûÖ!¦)xøð!JU¼üÊK8¶ÉzµÕèÄeUQå§ç§¸ŽÉk¯ÞáÉÓÏùìÓŸ°¿7eÔPä9ª(±M‹õ:Æ„YcÛf]@£ƒ#Mi` /Sžm1ê÷plMQ°…Î)ŠÖsŽ�žr±Xb¹=a°^6äEŒ F´ �¡ª ÒRÑ5«DÇÜŸŸž0 (Ò‚ùÅ\7®Q«œó‹†;n½tH脽®íñèñ1E®@µú²¦ ð]n^g:‘&ÂhµP§i€¥JºËPMVvPÐV@£»¼ºn¨j…ßazé"´ݎ3YnqS–)8?>AÔ-–!¸së6y–ññýû|ôÉ'üùŸÿ9�ßCµ-_ÿ—¿Î÷¾÷=Ÿú=nݺ…çú_ÿæ×Iã”t•ôB²ŽØ^55Ož>åÝwÞa0`™’çÏŸ"¥äð¥;\žÍhTKÄyÂùù)7oÞ`4îñ¿ÿŸÿ–×_�VXRÛ&Öˈ2Ë98¸ŽDN²<§,k¬ö»‰w²Æ”-�* ¬€ÀwôB,)é‡=вÂh£aHV¤˜¾«ã핾ä$IF]f¸¶è.(ŠR)êÖ`µLôx¹18yöËtØ™Œ¸yó&¾ëà:&ׯOp\“Éd¤­$–Çî΄“£sФ$[Ç4F‰ïHª,fg4$Ob�OSUôû!y­»óªÐ„lUÖ[üS¯×ÃmuÇu¿W•5×öv5õÛ”u�! „@³"¥‰Ù4œ=§V [œŸœòYð1ežé8ˆZ?ó—g'4ª`2"dû —·ÿâdu2ëªPÌf½ð&ÝqØ;ØïnmuÛrzzÊ|~Ù%…ÚÐ!àmÛF¡ïÑï‡L&F—�µnÀbµâìô‚ãÓ|ßg41ôˆ¢¥*ò4CŠ2Ϲqx‹×ßx‹ÃÃë”UÍj3è÷»‡S;—‹<Å áäèˆ<Ï™L&\¿u‡—ïÜæóÇψ×H§ªË’Œ‡†ƒÛrY­ÖT•þá,«šÅ*¢n ¤ê4ÆÖÀryÑ0›GTeA/²E:Çd²»C]嬢2Ó¡h†a€¡oÍI’ж„}QªAŠŒ²Ðát——3\×¥®<Ï'JæÔUC²Òã“¶¦£J{H©©ÈMÝRKmþ¬²Œ(I¦´Ôm)ñ{>ƒÑ�ª*(ªœª. ôz>½ `4ÖàÖá0Ä6»XKPVMÝ`u‡¤*5ŽÅ2õòUÐ`Jý¹·†ØZB¥eéñS—hÙ:xNÕõÚ4�öþ4/$ɶ4»ü“š^gìÜìó<çììŒããc..õüß0%^àㆎ㰎#Ò,Ó±æÆ‹‘ÛÕhóµqooÆ^ÛTή(lL™u¥P]tüFŒÐëõ�–EÜu> …0Uý(*­Ÿ«ÑÚW ÐF$suü·)€–�4µŸÚ¦…*Jª¼àÝw¾¨C-ÉïþîÇÞµ¾ýíost¢IæI’°Z-¨Û Ë–˜Bj¯!;+EÁb‘áÚ.w_}… èñàÁ.NÏ ‡ìïîrëÖ->yÊ�ërãÁs”0Èòœ$‰ùcK�.ô!÷ò+/a»ggg\Ìf[±Ošçì }æó9ëÅ)i”S—5ötŒç[TU�R%R:¤Y†í˜Á�ñtB–e£m Ö | <)5w­,3ÒD‡c•UŽøHËFÒ´©² Úõ°­$r‹º.t–R0äúÁ>AèáZ¶NŸlZT]�7 ¥*„aëÏ•hêJ˜Bâ8:¤¬m_Üê1 ®µË¿.sZioyb›Î ,K]€ºqަ@Wäk¬m[Lë¿m6›qqzÆz½ÞF�WM�>)×�†Ñ¶ZJ}åõ®’!€mÜÀÕnìúÚ€Mº®ã6[”ÎUÐhQä¹N¶ÝxjšF�ÎZãï‹®¾Æ/�·›£º Ù|ã¹kÛ–ë×É“œ‹‹ Ã>OŸ<Ó;“ßú-¾÷—Áü‡?àî¯ó¥×¾À“gO5]Âh-b¨k C: CR75ª.yúô)Ãá˜0 ™Ž¦†Áññ ¥RüÚW~•×>}D­*LSR•%OÚš�’œÀ¨¸yxÈÑÑ3’$ë´n4 ãÀÆqlœ¶áòlN¼œ1í÷©%ÄÉšÝÝW�Ââó‡é÷{X¶Ëd4æøø˜Á`µ&_»v�þ Çïÿûÿ›Z•`´¬Ö NNNhk-²�Ð IDATpL�Ä‘6…*Ø?Ü¥Ru#peðþ»ë,1½½¼¼¤Ê TYáx>{ÜúdUŧžEyQá÷BÒ&Ãs- jò¬¤T:ß Cg]EQ̺ÈyùÖ Þûµ¯hî`UÑï÷qLƒO>ý�þ@wøýp€cYìí³¸Ñëíà.Ÿ=ºÏíÛ·˜ôB|×!ô ©ñ<‡U´¦1!KRú–Eš¦ã@gPu‘i” …&Æ ú}j!ÙÙÙ¡Ì3¤ça™ºð¨R!hPyUIž¥Œ&#NOŽh•b­Ùßßǵ-~ðþûüüþØ®Î*‹Ó”õjÉtg¤…Ö¿L:88àää„a¯@Y(ñf+�?Õ* ÃÀsÎó{¿÷{€Ø:Í7AW¾ïsï•ë|ùË_&Ë ^»w—uœóáÏN^ÖÌ— ¢(Ú²¶|ßå`oŸóósTVd|õ_ü:£á„7nbƒÁ€ÓÓs,SèÙw–’å)ª¬øì³Oˆâ·n"¥Åb>cêøüæ·ƒùì‚££¿ÇáµëÌ.Ï„=Þ|ëUNÏŽ0ÚÛ³‘¢m$;Ó)ë(£¨ 4Óª!^GŒFcšVéÀ§4¥m<ß§ªrZJÞÿ}Þ~û ü^Èjµ¢.Ñ€HC0›-XE Žãá&µJ ü¾×'‹Ÿ1kR@‘+ÚF»‹=/`6[P$…”5¦´´j¬®iôz=Vëx{`&QDC‹¸dEAà»8ŽÅþþ–lIҚÛ70MAàÛø®ƒÑ¢iÁ•ÒÔ³“©Ö%¶enñµ*è›9�¢i[V«wîÜÑQ]šežçô‡ÒªAX&ª®Q…ÆÆ ¦ìY­mSæÅvdkÛ:Füùóç\Î4EØé—Iª‰à›Xn­à3±]‡8M ë\ßÓ‚�VS64hi͇«k=^î ”0 „ÔàLø;x¡­M }Y–Z�µZê€CÛÂúP+ªòE¡1^ }®zW…ý~+÷.Šbkسù„ÁhÈjµ"O*NOOi×÷ð=‡üŸICø'Xp‹-ÖCtsDÑ=ˆŽã`Yl•8AàtŽuê˵è.�kÛØ®ËÛo¿�a¬£„Á`DUS´0 )Š Ç³‘¡Äumñ<0�N1Ú†W^ºÃþÞN'8ÐXúÝÎäôxÆãÇ�¹8;Å÷}ÏÙf­»~HR*ö®ó/Þû2ýWï³\®™Ï.0 ¨ÊR“}§S¤€ÙâZ“ÀõVË„F•LÆ\ËA©†,Yk°0°lÁ ×§nJ,[bÙŠósíùiÛš¾7 ÈÒ²é÷‡½†!(ʆ,-È�¦»Q§äù²<ºŽMÓ¶”…¢*ë-^gÐë3 }_{³="/Kšº‚F!0q}·›u—xŽd2êÓëŒB‚i6ø¾K­Jú¡Fõ·µ¦T×ÝÙY×t~ « -è¨,¹ÝÅèp-C�ªŠ2Ï:‰µ¢éöÀÖãß_×5‹åi,)IòŒÇOŸpzzJž¤,—ËnÌd!¤ÔFNÓÔã (Ëía�¦Uw2å¦RÔeE0ü{£·«*ÍÍïo:±«9AÅÚUÁU¯PÛ¶[‚Å?$¥Þü™«¯¿m:±Ínó~® ¶ÿ‚$É°í ˜ÕÞv�Ëå’?ùîŸvYpçÎmÎ.N1¤îöòlÝ¥ÀÒ‰26EU¢Í>Œš¿÷ú¢¶ÙÙÙÁéQŒï{œFË;n:ׯl½tmÝlc!´ÒÎá«_ý*Cã9�ߣ(j’ë×ù£ÿëO0êŠ<‹±íIKòŒ0+´šË÷" EPT5^à’D1U­ÇÃшüè‡ìì°»»ß…*zŒ‡La2»¸àìäœ"K vX¯5™=Ž LéR+qÅ#&h ƒUœ ª‚Ýl—~¯¡•ÚTy¹XP55³Õš¢6¦þ9sÜP«~‡‚²Hè¹óù’ñpDƒ�ö(«†$^ãv¤jÓ´)«–4+H’ˆÅ2¦RŽ+�ÂÂé”ki�’çy¦ÈË‚\E¨J²XÌðl“~D‰ÔgõfOxyy‰jagÝAŸNàHÁ¿– ô+РÛ3j¾¥A-Y¶GVä”yE'”8–™5êB?bow˶w¸výˆ�јF+’uLVä躡Òj[�­9™±©uZ‰yKBà9ìïNèw;žG¯yÿŸþ‘wßù:ÃaŸN§Càù\\.9?yÎßâùó眞žà�ŸžR•)¿ñµ¯�Æ �?c¹Z±·»Ë­Û7(³/tõÔuIY´7>Pf)Ã^—áx€jàìì ­{»×¹ví®kS•%OŸ>&޽NÇ5AF5ày!R8œŸÏ˜/h%:º�>Žb·jØql,šË$!ˆÌÎ ­XÇ1Ue\^mao-ÌwF#:ad å–Í“gO }—Z)òx��Æum:ý~è±»·Cxx®qµìv H¢Ì͸«Ì3tÝ`K‰ÕîiÐiY­ÝòËã#­5e­htkjæxdEEÕêî5J㇠H“·åÐÔEIÑJÑX­Us¯×£©jcg­”me¹é溄mщÌ褪*B×%p½+]sHÙú÷2¯q>íö wH7ꥠzõë*0á_Úmv3›Äòe![­õvG¤ÚQ›…@cÐwêŠèéÕ$tu×su÷s59€‡±xhÊŠ$/Pµf9_P–5«ÕŠ ôI’„oûÛ|ôñ‡Ø¶ÍjµÂñ\ò<òŒ‡Z·ÇeaI )MaaÑ"QhÝ Û]\SeÉr½àÇ×'|ãAN§Ûç¿Lz|eo´íÞÒ4% ‚ÖÅìÅŽŽ®Q–&9öUTø~‡Àu°%¤q‚ç÷Úçè¿4nÔZã‡>Xß·YÍf 4e]1í€e“fƒþÏž_š¢Õƒ(°�ÇDA@àù„އíëuÏqYÔ ëuŒmG(-¨�íXX¶‹F"a{�0ß[qVâ…•Ò­ªKu–GFŒCÊ,æèp�gOoÇbY–`[`ÛÁhgB–—¬.§¬×1óùŒ$]’ç1Òj@4^c¯IÒ¼Ul7#ÓE<¥|�ñîµjxòôéÖZ&‰3 Uã†gg$YŽÔ‚4NÈ×);ý,e“´¡ë8ì�C=xÀ­W_¡Fð×ùŸ±¸ŽÅ ÓETgÏž¢ËÙ^Û§i*Bϸ‚¹n¹@.——S:½.®ãSe9�TUÆ’ØaI³Øn/Œ«þ)JÁ`0àïþ&�VxŽO¯ß' Cê¦Aj3醭¢í0W¾›×�X%)žë3 Ã�[7nptt�ë׎˜Íf\œŸóøñ\¿~�ãã#¦FÏLHÃC¸qã:AàñðáC–Ë%RšŠ ª ÎÏÏI“5us‰åzî8p÷�;LvvX®Ötˆ½Ã Y¶FSãwºŒ†}Ê¢f:�£Ê׺CÔëb96Ëå’2óñ<�Û7ö¸yóÈ,¼WK–«sK Ïs�aøŽã`k‹Õ*F5ææ.Ë„³MÈ«Õ)^'âðà!�ïâ¸.‹ÅÒÀ!-‹0ìà·û f0|<2DÈ8IxöìY¼C®]?¡p|K(t�!„ƱmKby.Z«­Ñ˜ïûÛŽnÀ¶ŒèëU~ÊÕའÀŽcÀ›@-\×·ûšMÒZ›�Œó¢ã‚€E±0AÉqð¢ð¥ýOœ&8Ê$›¦ªq<—¢6#!ÅÊø!õ<—Àk5Ì’„2/H²”Àó_B•]]ð}:õRRÙ$–«{™«ïó¯êˆµ¿µýù« ÅjoÈ«çoóývOt嘾Ü=5JÑív)³’²,)óŠ‹‹ ”2ÇQV%Ïž=ã§?û'†;cNOOZ;c¥`Û¥$ªn€M•Ûç/Êâ¥÷¬/��BÑëô˜Óðÿ¼÷5�‚{ÿô>ûªfow‚ÒšõºâÖ­[xžÇ£GOZÍ7£¤ýùçŸsãí1Svvê®Ý M�óç—s¢þ? HÓ´µå°�Xà§ß4MIò„·ßù‹ ìrrvÊéé)“É„ÝÝ QM…­“ɉ&Mc,áÀŽX“¥~à"¥¡ø~D]øA‡Áp„ßé“ä5JiרtP*Ë5³eÊÅ|Íb•£¥$ 3†nJÒ$a<ì³^/9<ØãârÆ`8¤×�8yô× ˜Îçg%c:½.½Þ€$Ɉã£á�ñxÌÁªèD‡G<úâ„å:£ÌÍ~$Ë2”R¦[‘’‹_3›Ç¤yIž·êÙøØ¶‡%nØEI�m9f7YÕ(L\KË”J58Ž�´-j­�B²³·‡ m—NÔñ½0eQU ÷ï}Ê{ï½G0 A'V£¸¹¿Oœ¥ØuÍùÃÏ‘ŽÕÞ³ 1‚¸×A——ç4ZQ%E]âXŒۛYŠe94‘�øÅ¿‰ý+Ð�;wøôÓOY,Œ‚±å¸/úí"UÕxžÇxŸ�Kgöì)ÍL~8²»»Ël~²e�/—K„4 ÙFAÓg>ÛŒÇcÖ˹ ŽZ!Úe¬ÔŠ4^SUæ5•³±U‚€8Y“d¢HI’Û6 ðZ«–£(Ê”Ëóó„²T¼ýÖWq]›º)I×1P#´&]µª½U‰jjÊ"'ð…ñ`w*rI’‚Åüt ÁœYJivÆÒ¼hQ%®ïcÛÖ)åº6e) ÚÄ2#²(òX¯— jÂÐe0 ©›œ²Ê©*Á`¸C¿ß'É*æIÂz¹"<:aD·E¯×Á`y6{»4˜T …p-òBµªÛG€%мÇÁó‚6à)”­k£]k´UãXòŠŸÌf4¤i¶ ‡<Ï·ɦZRJõì€2öx5•Ú‘]ßk;›²®ÌÏZ–A^z­|Šeì‹k¥¨•Q£F B?`±X°Z­X­Vøa€ïºÛÎZ]�7oþW»�/'àŸuK›Ÿ¹:¶Û&$ýòž‡/!Þʦƅ—^ïj§³9¦«¯uõõÂV·/Ïsvvv<#1dl=Lb�� ^x µ�4¡äÚ®±Ð ¥µ=6qö®7ã¹/¡ô´Ö�4 µ¨Üºus»wÐuÃùóS,ס?èâ¹I’ðÈå%ÇÇÇü䌙œ›ðÞwïòä"¥ìš 3brPâ¸>§§ç ûaàaKC—8)˜Í¦TMÅÍW^ãáçŸqz6ãÁg�ÑX8¶A�-WJÍ8Øb{.І¶-[#§.;»f©F‹ªÝ­hŒOHU§$ÉŠ"ËCŸÕ򿮬+B–› ”çZU”¹Ý (ŽA+šªÆ÷ !Õ¶e]"…$ ŒØg’¦äMM ꪭŒhix>e] …@«‚˜RV�j+èF'fÑ–ü�Ö¤yŽ´_ÈùØ®Ëb± ÓB˜7㹺ÝÕ¨vO$„¹&š¦1FeeBáÙ¾mº�8IÈËÂØSkcº'1.•išÛq«æÒëõ¶:ƒE+]su|v5¹\ýûæ±IÛ¿:kš­p£äeiŸzhh“ R 4”UEÝ&©«$Ô͹ÝòŒ®�b7Çiø^&‘øžÇþÞžñ¶É²-á£�>`ïð€»wïryyÉz½Ærlc«’æa†€W;?!zËyÚèà™×Ýî¨P¨FsýÚãñ˜óóSf—S:QÈd2f1Ÿ"¤nÍ%ñrÅZ¯‰Â.×öxúè _|öqQrÐ 8[¬+‹'gKâuÆÙéÛ²ØÛÛãb:åÑãÏyç+oÒ F¬—Kú�}¢Ðå'?ý%;“=ö÷wùÇŸü‚Ÿ}ð ‹åŠÝÉ«8a0ì“g5E>Ãs®ÝÆ*»QÏ ¶PvÛ¶) ��‚"¯xzòŒ( È«’¼*)*…ï…¸¶�êȆ Ñ•—ËŒZ(„eŠ¢²©Y.—ì {Ä«5~à˜B³.ð\3!Èixöü Ç©j¨j¡)k¤ïàØI§Û7Æ�”4¢Áv0–µÅl6#m2tØ¡t±…Ír3›/éôúTMCš¸®KU6U!ExÛb<rqq�Ð BHÊ4!ò\#~Ü(Â’8¾ƒãº(¡¨ë ¥+в¤lÚ °^¿Pa�R2�i€4ɱå¿d²ð_™€ºa´]è Ûa±\àúfÔ‘Æ1–4»‹´U½Þè‰mnƒJr·©,_�ÓVZ¥i1Î <ÇáýŸüÇ’ìOv©òŒR™7«Uƒe;Ø®ñr\‹,.PaТ¢`±7™0ÙÛãý÷ßç¯ÿúûØÒpzæsM§Ò�"rU2M¨JÁîd­E•cY×uȲ„ª6�ŠÝ&†n·Çh<àáƒ�IÓÄŒ"‹iKlϦ©âÌX‘giAU®˜ÏרNHžU¸^ESkzÝ!Lp©ªÂèæ¹6B@Ý(®îòüÙSâ8ƱLE¼¿¿ƒªª2�'�»8–�gIŠ,'Oc²¸¤8„þ Óž·#Œ¢ål¨´¡P¦:r‹år‰jw am÷=fÕ˜®GéÖ¥T"„¦ªÊ—FV2åfGcôÜÌùÚè• ‹Å±é:êÆŒ äUj…eÛèFa i༮±Ø–RÒ”óÕÇu±D+¿£”éJ=ß$Ô$1Õ^»O1ìtS¸Ø®ñâét:Û²)Š6ÿj¢ùòþÅá‹•ê¶ÈÒ/#â¬Efim4çڟߌ侌üò8o#ƺí,¥@k#Ác3ØÒa0ðØß;$I’VÎH÷·ÆõÉܘÏu‚­0¥h\'J‰Ä2äJ!„Dªžð ÒhŠªÂ÷CÎÏÍhO Ùß?ä“O>1äV×3ªÊiAšåFÅ\Õæ9Uƒå4µ¦’ ³Ùã/vI¼6òèQèÓÔ9oܹ�bÄÅô’þ ƒ´-Ë5Ç·_!/ ºýž™ )ÊU,¦—ìî� å®–—ìí M2r]êzŽÖ’4S4Ê¢Q�Ø4 ó劸Èð}K Êå¡”ß  û¬—ìÒ`±Œ×¥"Š"#I… Íb..ž³œ�.ßýîw(ªœo½û½~‡P)VñšR¸¾‹ïº˜i<¤0öõ®´pm“„§¡É+T]…þ¿:ýJ? A«” ’¼.©�F-Õq\ !À±%®ëàÙ6–4ã‘À÷�–l÷ƒÑ€Z+\Ïǵ$¡ï3èvôzL=�ˆÐs(Òϵé÷º†°æºÔ�2�–Åb½¤¬*lǼñù|N·Ó%^ÇH!)ò‚"Ëyøà>iœR%B ¾þµ¯s°ÄíÛwHó’^¿oD1ËÏwÑʦ4ÖB´<„•‚,ÏR²3ìóéýO¢.—‹ay\Ìc´ti´é6ªJỞaÛ>¶2�­X®üÀ¥jÝBÏQSV9u]`ÛÑh,i¯×$ëÇv˜MÍòo4²¿¿ƒçÃ�£=®_›°;°7à;ב¼þÚm¢0 HZ8lSÕ¤yFš›~YÖh$–mö<®ëcÛ.¶t(‹Š,M©ªÒ8*¨¥jšÆÈð�OÓÔyÖVlš"ÏЪ¡ªJ<ßE55®ë „b:½0úq¶-¨•Y\º®ƒç:4um>·¢@«ßsq]‡ªÜŒŒXm8¢.KTÝPä¦Ê2•^I†t{]ã£Ó&˜�eÄr± ŒÌˆ¦¬kC~n‘}–mƒÛï…”ÿìkcB´jõVÔôê.LÕ†O´A™Ù†4´­˲DÚÖvôh ‰ïùH!ȳÏõ°ÛB n9eµjXçÆ}g0fv±àÝw~“¦®)òœ^·ËrµâëïþÒ’x�K…Ì–s,ÇFÚaË ¡5––Ø-¢-@µhí÷YjȵRôºzÝy–ø“�Š´äé“§|û[ßf2Þå‹Ï>§Û‰pm‡4މ¢ÈXO8®móùç¹8;awoUÕ¼þÊ-¾û;¿ƒ+B—ŽyçkoòÚ«×±mÅpØA膣£ʪ&+r®ß$/j!¹ûÆ[|ÿïÿ ½^‡‹ËS Æ±ׯï#­†WnÞ@JÈŠ),²¼¡Ûb;6¶íPÖŠªxa�$/x~6Åö|̘ÔrÜVä5¥Ûé/Wx^H¡àb¾bµNÌsYhð] M�%jÒtÉWß~ƒÛ·n0÷YNgô»F4xЧ†ûæ;”Ù7ò¨«×w¨Ê¢UÈyüä1u£Y.žŸžÓT´¤¬4qœ³\e¬’’B ÊÒ²�ð IDATf±Xãú>eÝpòü9i‘Ó HŠŒÓ³s^{ýQ§C^”¬Ö+òºâbzÎÞá>¶ch–cS´÷‰@ M–f4U�´lTÙ *Etp,_TÝPW5aQ•UU0]g¿žP§Ó¡ªklÏGX’¬2Ü ´¦. „-�ئmMØ.‚µÖÔ-‚F¶RÚ6·4íìÝè Ã†¨j,-< [¨ÓÁõ|l×!+ öÃ`«…U·¦^J)ƒ寠¬ið]ŸÅb‰ç¹|çw¿Ãw¾ó..gŒF#ž> Þ{ï[äyΓg�™Íf ‡×®aÛ6�=a:�Ó°0B Y. cNg3ÓÒ‡CìZ`y! (ë†"o�¢B+Ë|€V€ëÔª¢,jd+£Ÿfk,K`Û†'¥ªz;âJRäZ¥8®E™ÝL–ÇÄÉœªppü=ŸÝ½1»“‘‘�÷\lËÚZ8«vWgÛ².Qšª­¦mÛrql#ì©te òÒB(�@S6¥¶Õ|SVÛñÙFlÖj…c‹"ê�qšA\Õí®Î|M‹-4E‘ñ(Z¯)V9ã�ᶃ1ú|Ñ–[2ŸÏ‰ü‰0�Z¾pñÜtaùXa ¹åÖlv–‚ç¦óø—4×6¢["ñÂ1Ôi¥„,^À°7¯/Ðb›ï­M×£_tN›c²6dXËÞŽ¡•j B !h´¢Ac96~°\'aƒZ žž<à¿ýÞ÷øÁ?þ˜×ßx��?þ˜Jµ1ECYU„A`>Sãñ�Ô›ó×Âε ^ÆØŽÅh04]®e˜õñ*¦ª“Éu~ð‹ë[·qvöœ$IÈó Û–F9`#Îê\¿vH7 ™L&t;;EÁrv�ãXLF¯š5ÓóS¾÷{¿Ëåå%~ø�Ž�N�4¯ÙÝ?âàú1ÿðÃpq15�¼kóæÝ×¶†õz�D1ôX,fØ–Ó‚j\Ç' ªVû­R •ç¬â”8MÌ8M¿ß¥®J¤p¶V%RJ’$ÁëvIË%Ëå‚NpíÚ!»;#\G UÅÙ³Çf²a[HÛ"^'H)Y¯×dYÉrU š ϶(3nxŽ$§f5�bûË嚣ƒ}‹O?Æ’›ëËXxGQ�ëúÔµ&/�°¨”’$-Hó’²QtÑ(¢n�R)ÎÏÏÑBò“÷ÊWÞz›k7Žyx?%Ïs°$�ž>Á³‚ÄÈþl]ƒ1_–°Q­ÇWSÕ&Yçnh<º\×m@ZNà—Фÿ_�_™€¢N�´0²"^àã)MEô»=¢(`g4±$ëåÜsÃÙ¨�Ê2ʺ!]Å:™µÞ(ºi—ÑFÄNjmÓBx>Y–áû«–i¯¢Ð v´Ûìxúý>~; ´m›étºe̯V+<Ïã»ßýîv”qçÎ>ÿüs¤å†~d*ãËËKNNNR£•Bù—Él¶`ÿ€ëׯ…]ªª!ͪFqëÕ×9ùÇŸ°JsDœ!¤KÝÀz¹¢,Ì8lÐë£AœX^DÝc#mk|Wïx[aa!-I])JU ”AkÄœK¿Ó£×ï2ôð<�Ó³çfŸÒéÐ %BKjË$‡Mp3 ƒŽ«J# bΓ…ï¸Æ©Eemöèf$¥4.œ¢E?)Í–×â8EõÂ׿…à¦ámlö(UUQÙÃ.ßðt:�Žù¿ªhIƒ&ñ­^Ç ‡CÂ0$˲­@mŒÇcâåzë"jž§ÚêÉYíØÍu]ʲˆ½A¶UUõÒÒÿË þÍqov—Wey6Zmeþâ½ÃË^AZë-”þË£µí�¶Ñ3²¸ò3RJÓ�\yݲ,ÉËb« =›ÏùÆ×¿AÝhÎÎ ƒ0ñ£ý€?ýÓ?ݪoˆâ¶ãРišœ$Iˆl…éţ¯@«V,×€=¼ÀÀÕ—Ë9ñz‰ÂÜ÷qóúë¯SU&ØÏçSš¦! CªªÄqìm‚7cfó™o¾¦—K‚ ØÊ8¥iJž§„aÈ;ï|�‹ËI²¦ßïQ–×®spp !Z‰£uÁO~üO-V1�¸qýæ¶PøôÓOY­VyÆôò�&ð=\·‹ç;ø¾O¹ŽÛc”Ûër#÷T×5È“”p<`<ÚáÓûˆüÛ–dɺE})¢(äøè�~·C–Æ(-¹yã¶Ùƒi…%=Öë ­ëuÂr¹ÆõÌyØÛ;`¹ŽIÒP4UC]TØŽ�︜<>eÔ XÌÖt:F4¹( ª:i�p(ËšÙbA™XÒÙÊ~ mÔþ£0`8ÞCè†4yÊÇJž¤¼ýæ[t:¦+«ªª¦˜¢5Ë2tÑví­°é¤%Ù:ÛŽÛ¯ g¥Ù‡ÇF%'Ébýϯÿ_õø•#¸ýÝ=ŽŽ¯óÍo}“ïýÛË¿ûïÿ¿õÞ·ùÆ7~“·ß¼ËÝ7ßdw—Å|ÆG}D†• 8²±Ëvñü€N·Ç`04&b­ì}S×4ªA ‰mÙ$iFÙŠ["¤©¾õ‹ µÑÍv^¿9yùÆÝ³ÛíRU“Éd¬úý>Ëå’04'Ýñ Wåðð�ÕjEš/úïÿû,+´†Õ2æôÔ�Mûý¾9 A^7eYšv|w÷Ú5P …k;øm†/ŠÂèuYf™¶N³vÌV'+f³B·ÇEÑu¥Ú½ÇŸüÉŸ†!ï¿ÿ>÷îÝãÆ�¸žÇýû÷9>>¦ÌrþñG?"Š"vwwùë¿ùŠÜoekм"ÏKS`‚¯~ñÁÌWÑ`‡‹'�iTAUå]»f4Ÿ,Õ@QTÔ•BJ�íH<7 H ª*Æu-$¤U ‚À¥EXÒ!ô:Œ#c\x-B%.K¤´ Ô²¨(‹ ai$?ðé‡/€M�㸸¶M]K”,IÓh)À±¨kSUu…Õî+ªV¤R‹M°4éQ´ÚaWQbW=k6hÇ ^BvòckJ‡AÍlÔ‘7?[´¢£yžÓíë�Ë膃b*å»·–uµMW¥}døà…Á­pª°ä–7uB½Iöýfœ·I�›®hó3WÖ—»©¼å']í�^6ˆ— ¼Uó²øèæõ¤ccµÝ’çyæ\h‰vÒ&#ʦæÉÉ3’<ãèøØ�¤-‹4MéõL¥-mIÝ&±¦¬0ËÕ¦Û ÕBcH©P55Hmx&žk´×xAD–<|x�[·n™.¼1 XÇó­ñÞFÅÛm½d”ª_@êËÄH$ÑPå®g¨¸hHâ”Ùì’$Kév�¥yžçíÄDÐí±ãÿøÿONOOéwºxa@ê'Ìs†ýžãÒ9ÝNȳÇOˆBŸ½�1¶çr°;a6;G�RM»“ÛÏVë�C®À²$ûGt€~¿ËíÛ·yôÅ­¼U…”¾gÑ =<צÌ2f³Y²&O3¢(âøøˆÕ21°ðeL¯ÓŶÖëÇ©ôGìv»øa!m¦ÓŽã�Äksox>uV�$ ¡2›OÑB!m·µ2)�–è+À6ÛÍùJÓ46Y^óôÙ™¹Gµär6çøÖM&»û|øáGYÂÛo½Åîd̽{÷X®W”¥q¬ÃÛup\GšŽºH ¤°±-‹N'b8�e EU!èÝ]úƒ‘¡Pü+¿2½ùöÛ|òàSþôúù_ÿ÷ÿ�*ÉØß�ÐëõxðàÝÖqψ‚žrãÖ+8žoä -‡¬(XÅ) (ë†çÏÏ8ÑFž¾ÈRÐ û»Þ¼{—É䘡mÓ¨Š*«ŒìJ^Ò˲íõªkåFw,MM ¿ R“É„û÷ïóçþç¼÷Þ{üû?üCþýþ!Ióƒþ�¢(ȲŒª6n¥J)â8æ7¾úU...øøþ'L§s‚°Cö˜/œýø'`I¢°Ãó³s‚~Ÿ8¯ÈÓŠîÎ�Z,–1Mi ïÖëÍøÈŶ]´6Ap5›áyš0ì2�B—¦©°…qP4# D[)ÒtM–ûp׳iÐÔ�¦ljj¥±ÐHYSÖ¬ vÂŒY„©v ¹±F5f-ÛdãØF:hc� laÐ@ ·ÖÛŠHbHŸ›öªœ’ÖÍ6€o´Mõ‚ŒZ×5uµ�ާ¬[WÜ l:Š"e,ºÝ.yž³XÌ·#4Û¶Šm²SJá´Éíª:˜‘ݦSÞ û¤m_†Zo’ئ«Þt�_Öˆ“R¢Ðÿ,�m’Ífì´9†) Ù-Ñt›¸ôË]ØahYXR°O«¯¸˜Ïùíßúoxúèùö|¨’Ä@õmË5B°7_áóGŸqtã!ó圢,ñ|ÇS„F¨ÍëHÂB` ƒl+Ê„@ÚFDØu]fË?úÑ�xøð!ðÀlvIÞ¢-Ë$*UoGoWÏË&‘&©Ÿø�‹m[”Ua�˜=“`‚"àòòÒøu{(eŠ�÷ߟÕ|�P‚,+X,œ>æôô”'Oñäé#¢ÀŒŽÇã ³EŒeYœœœ±;6�¸@!ô·Ó�‡(t™M�ºD㻃A��ñ�Åüb{ ú¾K^oÎoM–-WO#¥ áZ™é‰”æÏ¦iˆ×)–mãû¤*¹8Ÿ"„àÕ×^ãé£G,—K^{å6ï¾ûužøàŽ��QJ1�©ëšW_}•{÷îqÿþ}>üðCþìÏþ Û¶yç�wøÞ÷¾ÇõãcÎÎÎÈÒ„Ñh„ïzHÉ–Ñï÷ù£?ú#@rÿ“Ü»÷ ³ù’õ:¦hjžV—ôGcŠJ±ˆ× ]7ë匎kã{.¢6‚�Ýk„�.K,[ãº{{}¯íÑí¸¶Ù}ÕuMY�ÄkP¢­üc<Ï¥×ïà8&h”¥¹ør/§±lªZ 1�ÄZHƒï×­B€.LÚð:Ú«T °í2TƒP4êE5¸ œJ)ª¶bD+tÓ€”u…&Л]Sµ•²y‰Û¢M²s-Û$ÙÖS§ÐÝ&ÏqèF‘A³UYœ°˜Î(ŠË’-Ѳ&ËR¼VJZ�PÛBXWÆ]RR´IpãÁcÛ6qšl�WGcWƒÿæ977ü—¹BRÊíØló¸šd¶Ðiý²¦ÜUÞÖÕä'„@·¥Mñ`Ù¦ëÛ("4Mƒ#%yšñìÙ3¾ÿýïóÊí×¹qëþáÏãÏ¿À¶� Eø¾¿7�[s<…¢×íuC–óZ*ƒ~kUÄBªã˜ª:+3jm ÕBßÇq}Öëç¼ûî»dYÆ­[·øÅ/~fdºìÍ9U[E‹§Ý§™ëb<Ç+ªªD)a”ÐmcÔxqqAF\»v�õ*£ªŒÌH®_¿ÁçŸ=B‹k‡8Žc&-yÂáÁ¾kÙ�0"/Rövw±m‰%$ý~—"Ë�‡,Ö‹¶sWäUEYåHiá8žQ.¯ ]LÒŠã�ç³··Gœ¬88ÜáÉÉ#ÊÒpì,žcÓ ÖK»-®JÎÏ.HÓ”¢¨X­ST3¥,s"ßB«š$Y·´ŸÐwŒ*}–Ò‰ŒF£cÃWÞºK™¯yøð!Q`vðuZ °‘˜ñ·ª (€FSµ»c°¨ÛbÆñ‚íõf;ÃNAÅl6c42¼qóôéS,ÞzãM²,a¾\0ŸÏÛiVŽÖF\`0˜ë¼ªÐµ)Ã0d¸c”[=zÄÙÅ9‹åšJýÿ`ÉÝ p|ÏX·†!¢e\kšíüs³åeÍbµf°3A5°JÖdE‰v|�ªª¨Ë-,ªZ±N2¦ó9Óé¼5Ç2È`0ØJ`lÀÙå%?þÉO˜ |õkoóèÑ#=zÄk¯½¶]¼^\\àº.GGGüñÿ1?þñ�¹¼¼d¹\òóŸÿœ¿ú«¿â·~û·¹qã7oÞ$Iš¦¢iàéÓ§ôz=îÞ}“¼(YÆkŽ��8::æ£_ÞãŸ~öS˘¬Ê)êšåé%v¯Ëhï€Åb†k[Lƻċ)¶´ÑÒÀ°ŸóscÑ|íè€k‡cº½ˆ,_Q•%ÝnHÛq?°9?OHÖ–%Ñ4¸ž iŒ«ï›Îh½^£”ÂwmúÝã¡Ç`Äó}®ß¼AU+êF™ÊA’¦H˸9¦©Q8¾ÿ?ûéûìN&[ƒ«ý½=\ןápHšç¸žÇÏ~ös>ùä>ežññ½_š]R·»!øéOÊÎÎu]3�9<<äÎ�;ììì´uÜ}ýuUA£ö8¶A~˜ý‹äƒ_üœÅrÉÞîó¥!ÍfYÆéÙ)A·ƒt ÌiAÂðŸ,!�ÚÈfض…ïºÜ¹s‡»o¼Ål¶ (kfóKú]Ÿ^Ï72M�ãY‘‡ëØ,³Öˆ-c:›‘— è†u<§,S×åÓÏ“ç%�0�èu;ìíî2™Œ)‹‚º©‰×k¤%Y-—$IŒç{F�¸È =iIlÛÂXÝh4æ³*«’F5(m*Ö²ª¨63eiF3?Q·Ýeßs·g4‘¬×Te‰eÉíx,MS:ã\>'''[ö¦{’­�΋�‹µ…< !èôû)ÍqÁ6qZ¶m>`ww·åw•x¾�ëy¸í>'nÁ ›1Ùfùµ{ÙXè6øovARJ´N¿l6¢­›ýÑU9­õÂíy¦Ê¾úh”ÚŽ9�ík•¥™§Ë:¾3ÓëtÙÝÙ1ÕørÅÿý—ÿ™Ùô’¢ÈðßsiªŠF)ž={J’&ôû=ÃÚ®~py95\�ª6‹ì²Úîãšv'…㸫7nÜäƒ?$M,KpûÖ-?~ŒR�Æ\. ÃÀ$nax�vËŒWj³'³Úoö.AèQ”9J+Â0 Ï ñûèè˜ÙlƧŸø¥4“Ñ„²,èõz ‡CªºäüüœñxÄW¾ò6½~—ÕjÅ|>#ŠŒ³2B·ÂKâ$a4ÚÁq|f³Iš¡�fDîÚ¸®Ãz9ÇwΞ?C+ƒô=Ÿ ôð|‹0té„ ƒâ«Š’4N™^N ˆ¼íDz½>IšµîŒ~/bgÒcB…,—sʲ`oB¯ÇK´ª¨êŒÉxÈÉÉczý€<_“$KFã!µ†õ:&ðºaÈp0`>5#µ0ôQõôa >¦ ÔHšÒæííO¸qó�æö­[¸Žán6MÅ:^Ó(£¬n<—.Lq¸ŠÑJQd®çq9½d82_.¸ÿ§§§D�®‘íRa;$yÎj™ÿz ,ÉÃÏ>cµZqzzÎOü‹ÅÂÈÞ—%'ÏN ŸpyyIQ•[v½Ý-uYS·lñ²,ñl)}Š4áç?ÿ9—3®°;Ó4F²ýúõë”eidä[hd¿ß¥i...°I§Óa41�^š»_\\0�·<’$I˜L&ÆÝqggkr¶„x>~ßT0MUsr~Æã'�ÈËŠ¨×Çö%»ûžœ<§(+lKÒíyØŽ‡Ö‚,+©‹¥k^{õ6{;; úíµ^,ùäþ=ŠÊÑ-ã5Ã4$ðm¤ÅV8³lßçb~Îz³Ž—f®ïPU¬Ö â43‹ÑÞ˜ÉdÂh<Àµl<Ï¡®j.ÏÏð—ª4°y%ŒdÎf¼èX6-5�FiC˜¤5IÛRüêŠ ‹…@·Ýr‚À4úW«ý†–ÚeY²··g�R�q|ÜÀómÛf½^sz¶2pþ~Ÿ(Š˜Íf† T˜%nE­ªF³í6»„Í¢^ëêÒ›aKkÛÉmæìBª-ÊÞVè›®æj7rÕ÷ç*„{sÍlÐ}èøæ=oöŠQ½„€»Ú]M¬›ÿÛ<®î5M 6DZ�šÛB2�™ÏÖ z¤hð=‡x5g¹,HÖ+âd‰ªcE²»C[M¼°Ûá`ÿ�ÅbÁx4 ðíí{Ût´ÃÁˆ²4A}Ÿ¦ÑíçR#É4e½^R×%J—\×µ·ŸÍ¦u~1f|9œl;»öžÝx™D¶ÈVÓ5w:=ŠJÑíöYÌW¤©�÷zí}ݨª-6Gôû]ÂÈçÙ³gTUA?�$]oϧïûÌ—ËV�Ã2T†´"ÍY^°^%ØŽÀ± ç§)2R4�ãrãè:»;c2ô¢ ªTcÜ¡W«˜Ûv¶ÁI �c™`b9’ßýÝßæ“Ÿ‚%©hiq1�²·?æáÍl ”ª©‹­À‘fnìÚï}ó›ø¶…ïySjTU‚6Upàu�ŽRÒè†$‰™Î�FY–¦ŒGßg4Ù¥ÿÿ²ö¦M’WšÞã~÷%öÌÈÈ¥ªP °.½PÒÆ4lÙüI?P’Ù|QO·lfÔÓbo\A$ÀZsÏØ·»_w}ðQ ´Ñ¬MTšÕ—ʪ̈ÈH?~Îyßçí´èõº•xÇ IDATÔeÊf»B —m&�¢é>Š’L£gU˜1äb±@«ªÙ­Xh)È‹�TZ¡„ ˜ÎÔ@Iµ0·SU)v”·æN×쌚Ÿe™¥Má6ræýÁÚŒƒ�É€99A)Åõå¡ì�Ò»X)ƒ0Ù€Ý8Ï@Y£{7òj¿›Øñw#½�ÈÀPS˜*U¿YYí÷PeY’6¹@~#3½/,Ø©ô̈$Û�ï ^vª{Oþýí]Ðn¬´{­îþþ˜MkÔ»6k�3i’A°'9èªÆwL zºÝ2èwP¤Ï>zÊøöŽËËK¶Û„Ë‹;ú7·SÆã[”€£ãI’ps7!¼Óéô89yÄz³DÁtüð)¿þõo<‡n;¢høkE‘ÑnE¡QæUM¾Mp-›¼H©U‰çµ z¡ÛÈÕKÇÂu °×o�M¡iwb®/nxp6$ Bê'§„¾ÍõÕ-EQa˺ABIjm œ¸NˆCBz¼yóš›ÛKþ‡?û ΜðòåKîÆ·Œ†Gf ‰i50åœõz õûænl@­ç&‰Ö÷� æ§?ýG¾÷Ýïsss‹íº�0âߦ„û£èÿßþ’í–<+9??§Ns<ËFk³€‡„alÛ4¥jnªUU l£Š‘M AYW¨J.–ÖtâRh²4%OÌ8c±˜íIÊ;_ÏÉÉ ­V‹O?~ÆÍ�ô�Ùò‹/˜Ïçt:ž={֌̱^¯M‹\–ûÃhwãÂP­’R™edžçüüg?c›¥øQˆG¸AH’¯iucÞ{ÿ1É6g½É˜ÏWäiNGœŽŽÒB��X-æŒÚ¬ÛŽèöÚLæŠFnl�1­|ä€p°M«Õ¢Ýî±Zn°m—Vã8.eYQÕÊ8Â;mÊ*A+¨Ëв6óú$QdiÂ&M8¿8G(éôú8Ò"·rŠ{ tcœÜ¶æó­V‹n·Ë`0`±Xp{}e€˜Í ”f$Ç1Bˆæ¹"Ïsóyì}·¼;ÀvûžªªÈšÂ³{ ÷ ŽcŒx›ÍÆ0åš…ø®`Ýÿ?÷%Ô»nã¾${WØvQÍ{1�`ßaí$Ù&nÃÞ‹%v‡ðýÎçþ÷ü¶éí¡m ¦AS€’$Á³ºÝ.UQ2ŸNyÿñÚ¡ÇírΣ³c;-N†îîóúÒÜø¥,¹¾¸äêêŠõvCÿà€>øˆAÿ�v»Çóç/  ‡¦à$ Ó阃ƒV«ÕÞuzzÆ_ÿõ_£êšÍzMä̧c<ߡޙ«]—¢Ì¾Ñѽí„Ô¿êôîgíöoAÑnu¸¼ºåîvbΔé‚gŸQl¢Æwñ5`5Ë}‰´–FQuŸ(-î퟼f‘~ü¶û¸/ën·Û�"ñí®æ>-!+ò½Gb·8ßl6ûï³;\¿ýg¿_rìýñ¬µ6Òym ¯æ'm„VS]ט�QŠ~·‹ç:d›ãÛ+sQktÚ-FGGÁ׬¶²¢4“�\êr=Ʋ<þæoÿ?øË2žÜòàAF–lézt»mFÃcŠ,#ݤDQ€ª*®/.IÖ>úðC\×Üη[£ Âø?v£É�ùøFÁÕšýû©¿Õ]ËA§ÝÅu]~ô£ñßþëßSä5Cz½>77wœŸ_r}}M¿ßc:Ÿ°œ¯ð[yÕ§.E‘1[˜Ý ZQU˜}›ÒH×¥5Û$#jÅMôKM­h:"³:X­ Úmz�ˆ^+Ʊ%¶6ã2¥jnÇwl’-}/@ZIš2žÞQU ×5g]à;Ø–&K×dÙTFYÔ¬¶EYS£ÉKA’VIÁf“Òiu™N—\^¾6æ`]â.~èÓj·)Š‚ë»[âÀD›ô»=P5�ïpxØ!ÏVdÉ Çñ(³ µ°�¶o«•BÕ%º®¤ù†ãÓïPUq}yI]QÈlfÎnß÷ñ=ãYÊ ƒ¥Ú$)ª•&ÉrÊZ1_®8>>¦. Ò,ãôá#?b>[2Ž˜ýüO/@Ÿ}ú]~ýù/Ù¤[|ÇåÝwß'ð|ŠÆ1~ssÇÝÝRJZ­yž³Z­8::Æõ“S"ŒÛØvtaà¡Ë€ƒÃ>¯_þ)ÁuL·ôúåsÎ_¿Kò“Ÿüß7£˜Ë‹ >øàêæpعîwnù²,988 Õjí½)www´Ûí}Gµ^¯ét:M´d³Y±˜Œ‘:�6¡ï²Úl(UÆrµàòò‚¸Û&I +iÐ?DW ‘çp4ì¡€ÑÑ1£aÏ,sT–£T…ka’(-‡ÓÓSÆóEU7ÅÆ£®jòLSUY¾e|77;„ÀxæáP z¢ØgµL ¶˜N§¨ªa°yîþ 5KH#Ȩ­š´ÈY¬–ûü¡¡m€£e¶A«…0(¾l”@Rb5ˆ•W¦ð¨oÞà-ËŒõv‡Ìnɼ+F“ÉĨ؇Á``¸{äyŽ”µù¿;ŒR«ÕÚöY–ñ^°·Ýçµ)­±›1ήxìè ZkÜæñïL²»QÜnŸçùþùX–µ§ì%ÏMÙÝÌïï„´Öû¿+€EQì¿÷îãÛÒëû»«ov ¼ «kþ_E{ÃmH-ÌX xòÎ;l—3R­u�¨+ª"ÇwmBß%†8ŽMÅ(!¹º¹æë?¼àz¼`½Hy™½ÂõZL§ fÓ�?Ûï pXÑmÇî/n¿ÿÝ×óî»ïbY‚ëËsŠ"§, 3ʽw øÆØñÞs;¹wÓñܧK¥‰ã˜(Š�§<ýàŽãpyqÿûwÿ�lÖ E^1ŽH2qíúMŒ‹m±]'õµÝR×îÞD¼Ë%«µÚ+ Ó4ÅmˆýBØDQÈ&Éöy;ëõšƒ~‡w>¢ÛQe‰ÓdZ%ÉÖÜþËŒÀ�öß÷±,Ó©¾zõ¨……æööj¯Ìµ òŠÙr‰íXV@YCVÀdºäÁÙ#¤°Y¯Sª*GHp\Ÿ¢¬(“é˜ ÙååÒ$A?z‡vã¸ëù˜^7æù=Çc:[2™­X§9›¤0¦t×#ŠÚD‘àñ“GL§cF'#ÎNŽñ}Ÿ,I¹¹º`½Ú°Tò¼Äñ„°É³‚¼\QÍLF›Fòæâ’JiÆ·7\ž_ÐjEüøÇÿžóóKÖÛ„w=fµ¾úÓ Ð³gϘLïøío¿àë¯ÿÀG<£R4êûª*)Ë‚¨qñï Ѓ�š~�´ ËN'lçYƒ�w�Fûçî߆¾Ït:a:�òÕɈN»GØŠÑÚ¨Qv†6`�lɲ̧î¹Ðw·²Ý/hÐ;yïÎyo2V||ÏCÚÏw˜ÌÆØ¶Äv$UUSU’%+ê´$ò[®EUkt™Q$kj)H¶+œæ0\–~ÜÁv\ž�òâÕkæ«”$)@j„.M–Œ UU -HÒŠ0°È ��5e™ãy!AÔBX>^²Z¬ét[¸^`:¨À£ÖŠ$É(ëš Šð]—<+�ÒùäãýëiFšM€õ^9¸{žû™,ß#vi»»qúÏ~ö3¤å˜ ƒolW77\]]Ñï -Eÿà#¤cŒ˜RJ&³1«ÕÊÈ·—,Ï‘U‰¯…I*µ‚²RÔÚx^º»˜y)|gÿÞ1{¤e±¡× )ó-žmsz|Œ1…'ôºÎo.¸ßÑé÷8==¥Õj1ŸÏI’„(�ÒŒ÷GG‡f’ãûdêÌÉ6)ñ…MU+<7$M*¢¨C«Ý#ŽÚ&Z‚šÀo±Z&L¦w„­×’TeŽ%óé-–®ðÚó„ï|öŒ^·�ï‡Ìæknng¼¹¼á«¯Ùž_P¦… øÏÓ§ï3OÌ…UZL&wTeÉp4¢.KƒÔFÖm._Šº6Ȩ»ÙÇqh·Û¬Æ>1™LHÖZ�6——WÌç nnïøË¿ø/ÏÿÄÔnEüð? j”1®mn–¶4j‘éjNYÄQ€ãZ yš!¥ÙSi†øèª¦ßé"ë5oö"Ç÷˜ÎædU�ëŒçS‡GŒçsþîïÊ`0à‡?ü!Ÿ~úé~Æ^–F}†á~O´Cï'M´YlçèâhŒo5®ëPd Û45LžM‡h¡X¬×Tªæâê’v¿Çf»e;ŸÒê´ŽM’gøÂÆv,´‚m–°BÐëÄ º=œN�»›+ËF)¨ªšíbMUÕ†l­…ÉÝñ<Ê\Sä5¢471×ñð=Ç�±�)LÆÒ˜Â2;µá ÏӞЊC“?�"·ÄÝn× ˆ­ëš2/˜�'ÔeEHmFH¨·ÀMh¨Ñ–�e›¢½‹°X ­y×ù”u±G»äµ¢Ü´– ¹m.˜aIÉ ×g5[`KãðW yv̶ Hs#Y5(×7…µ*‹ýMs×�˜‰”jÔ–Öþ°.³fÇ&-¼†Û— ‰D ´¦j@¥`ŒÇ»½ÐhÚ\fÂ0ÜßPîÑDišîG¼»â·ëjvÔ¾(ß+d»Se™9–¿ÕIm2x‹Ac¶Ý®ÖÄaÄá`@‘ådÛ ¾ç±œO�’­Â¶l˪ե$©*„e„2RR}‡DáûœŒŽY.^½:çöö†ÉÝš¢P¤kn¯K¦ã �^Û˜Y—/_Ç-‚°M¯`TŸÂÂõÍ%D7{Ä'Ð<ïúmâmP!ºB �;éþn4Yí§¿úü×” <{ö …àÍ›7|þÅo �Y®V¤ùšv/¢ßïS†.°Ý¤¬×[ÚíÙĉ¨:k¢8¢ægR5 Ñ¥`›¥Eа«5óf¯ÓéöY¯æÌæKVhއ â8`±2cêÓÓSŽŽŽ988`½^3›-HÓ ÜÝ\³Z,8 øÞ÷¾ÇÓ'ïP×5¯Þ¼AZ!·óÌ$¸–9–„^§…%MNX+јÀÊEwÎË®›+¾|þ{?y€kYLnoð<�Ó£E–szzÌd2ãæî׋�Žˆ=p,²"e¹Þâ{Ÿ~üãÛ;ÀHî/nîÌhµLÉòùÞ/çy>ª,HÓ„M’²ÚdDq›ª¶¸�Lè¥%éfMž—äYÂéè„?ÿþŸ³Ùl8>™.ð_m:ÿøÇõ}ôá‡x–ÅtZX?àóß|É‹¯¸º¹&Š|îÆ7bZ Ëñ}¶ÛŒÙlIž×yI»ÕMÃp¬“„År…´-PšõjE­4QÜFØ.q«‹DÜŽ§•±'TuMQUDQˆãX mº�˜Ù|Ì:Ùr|ú€ªT¬Ö[./n¹¸¸$p}úí*Ïhû>ï><ã¨×#ÛnXÎô;}†\[Óëx\�¿ ô%�ØcØos4ì (9;=àæö¤âàp@Üê°Ýd(eóè�÷éñÿü †£¯_½æ`0 B²ÜHÃ;Ý>ËmÊùÕ% �ã:ÜÞ]S)ï½û�£Ã¾QßåŠÅbƒ”.e­M‡(5Ê®©e…ôØ’ùzÅd¶`“TL’\QÖ°^'hm²×Ö« ¾çòàìO=äè`Àð O;Žxy~ý§ù€¶Û5ýn—a¿Çß]^ PyJ™näd4䛫åœåbÁÑè×–Ì&Sò²àìô!OGHËf½\q8P«Uƒëz|òÙg\ÝÜ’×0»sñæßµ‘ï½K¯ø!–ㆡ‘ƒæ&Žy7ƒw‡áp¸Ÿ»w»]ÓZz6y!ì¿ Ørm?p¸½[2™Œ±,‹(ŠTZ±Î²"'ÉRã"_.˜¯7(AÇt Ò¥ec;.UY²Y,q�$'kÚq‡ÑhÄx:eµL�…&-k’$C× ß±©… M·žK«cÆ�I–1¹™QVŠW¯ÎѺ B´ÐäU‰”QÓë…l’¶¬�”ÜóÐB’5Z7»'ÛÜðm! Ã�TEÆ|¾¤ª*no¦ŒNOh…½^ÈÑè „b³Iöª/î�Œ¤nòl´!—£”‰nhnö•ÚÝvå>OE“¶¹>�ÐÌ÷ûÝÅÝ-Y’¢lÙÄ:ª®å:¶eÒNm»¡8›kEÍL½çºý{ð§”®‡Ð�Ÿ%Ëp,‹Ð7ÅO¨·0Q%س´à-M¡ª*li}c·ëZJUCC§ÖZïG{÷åä;qËÿSUZ~“p° ;Žc¢G¤ØïÝJ­ö"�`:™` I–$PTM$¹Cžšâ7Ü`Ka"ÝÑT•Ù§)]ƒªÐµ Ê·Ô…é’B7ÀuÜãC½Z &ó“ñŒÅlÎåù5‚¸Õápdnù~™±g­xýê ·w7Œ‡|ï»ÆjµâêúÏ5qB+–Ë9§µ‰tpl›ÁÁ¥íï•~ÓÅœ( °›O>ù„ŸÿòsÊB0::¦Óë/éö{<¬2žÜ‘fyQ`;.–tÒf¹Ü2›­Ÿß¾šq‘6!$ŽãøÒ2g×jµb<]r8zÀùå‹eÊz±ÂouȳÄàm´K?zôˆ§OŸ‚®X,fè†cYT¥ªϦ̗ „®ÐUÂ'Oß§HÖDžK²Y"UÍñáÚr™Îæ„¡¤ªlÞrJ¿? ×î4?…mUtº1?øË?Ãõ¶YÆ?ýÓ¯©•dÐ?áúvÎæü’¤P\^͘O2’´ ô*Ò»)iž“ç¼¹º&[tº /_¾¦*sþìûßeÐëà`r®eS»Â¬MT²2àZLðdº^PW4k—ZTJ�åRºX®�ª Ê,'ðBÎN2q,›ƒƒ>¶´ÿöDî?>‚ÛíK¤”ŒF#3öp\ûíbxçüø1�^—þð‡´:ÏåhxLÔî°X®èv»¨õ„“Ñ1QÔBZ6¼ÿþžx[9U^€kï—½³ÙŒ^+æõëלŸQk½Ç¼ïIu]³ÙlhµâoýêZ!„-ÑBîq;ñÂîCkó úü/ñâ�n¯GÐjÆmÒÒ þ·Û-žå°Ír’¤!v7ÆÆõzM–ôû´Z1¾¢¤ÃíxF–m¨UAÜê0žÎðÀÀóX-ç ¾û½ÏØ®7üæ·Ÿ³^,°I]—H RK"? /knïføv‰g¦œe¿¥'WYEUÕØ $EŠk»$Ebf©)Z~èàz>Ëõ†¬4û-×µq<—ÓY,fˆ†š­UM¥�w¨Òº?h©›ýˆ)LÆ´öÆ)¤d2�âZ6ý^‡^Üf82YÎÉÒ®ã8 Å~‡²óôìüZV³{*‹’Õb‰ã8{ÑIÔ€gU]£Ë §åeYÆðà`_¬Šª4.õf,ëx.¥Väeñ ó²ÖÚüRúÞþR³)yµBìö�;�‚ëòÂîóAìiÛ»•]±B šÂ¥„@haˆùMÜ6˜m‰ëy¬ÒÏ �úopöàík+ÄÎ4„RºÙ½½íàvFY]«Æs¬öL¼<+‰"U–X@ø´ÚÎ=d2™p~qÅ:mÎ/¯¸¼¼f2YÒé„ †Gt»]óÜëœv!WW7Æè}pDúÜÞ^S+hu{èªfÕÀf{ƒËf¶Xâ9i‘E~ðð�Güüç?Ƕ]Æã1qÔ§¬«åf?Rz;ZæœÐ`9.ÂrØ$Óù’¢RË!Jsò<5»ÝÐÃs¼oà�¢¨E­ÅbC»ÝåêzÂv»E:fl‰í \Û¶XÎæ{ñÉó?ü�ß}ý–ëQjE­ g­(3ü( îÄÄíÛµðý±ç‘§)óÙ+ÙâÇ´ÔT•¦(ýƒýC¢0l˜wS,KÓò}z½A¢¦S¦Ó)–í#˜1Y,É”ÂõC‹u“åå⺫dÉänÊb¹e2›Æ%ÛMÊåù½^‡ããc<Ç"OÓF�k楔ÝØ(´f:]âùÆo§j‰-<ªJ‘l3À2¿sJ!t‰kÛ †|úìC>þð=¢80už¤ÖŠírý§ º,ah²æmËÌøNOÈLtq~iûþê¯þŠÿü·ÃÉñ§!, ÒŒvF�y¡CßGDF‘µ^o©Ë‚,I ë˵ BÇ’HtƒÁ�E‰„ä7w¸®·?°v>�]!ÒÚø_à-&å>ok³Ù0�™p¼�|»,Ë}LÁz½¦F˜ÌúR±Í2òÒ$R:ŽGš´:ŒA²ÕŽéÆmZARUÝbA·ã6¾ç&A`¡ª”ù,¥×í²Ý¤xqH§uÀðxD+ô¹½º ,r|Ï3¿ EŠç9DaÇ17½ÕbÂA' ð¢ÈÁólteFƒÛõ†4M÷yGZ êH“l�Á3/ (k¶é†¢6H”žl“f™y͇»ÙKHCÜV «6’kÙøV*URTUñ,wÇÞ½ÛŠÉñ‡írÁr³fµYÓ #º‡ú³«ë ƒì•Ï ˆÐ{ÜNõ¶3†J J—  UUnà†!U^`‡Ñ^XRdù¿´Ùlöê7åØøÙ¨õlË6;�¦ûØ™)w»Å]¡Ù©¨dù–lm cÌÝ©ôÇiࡼ•ƒß{?ß(tBò¢|ûž4ÙÀ{A‚<-B¥ð]e°]¬plËqO(ÒбU] IDATvEw÷¾½{Úu`†vžRWz¯<1:<Àu]Æ“'''äŸå¼>¿à믿æ«/_E’ƒƒ¢(Â\¾üòË=Ïo<c[‚³³><æêꂬÎè!´"¯J³£Ònw[,WS,PçW—Ô•`xtBYÀb±âúê<þœ/_0<:ÚÓ0’åbÍùå¥a­m·Äq›(ŠÉó’$1ÐO0®çï2~ 꺢* ¢¨E™Ð¹årÉr¾Ä÷<¶ë < ×i«Å”8nS”5/_¾b2™à…ÊZâú‡a@y Gõzt¢€7—o=›³áiK²"e³œÓÕš¨Ý1нÌ<¥`›ddé–l»áÁÃõ,ÍÏ%bÎNN¹½›qsu ¶1×ú¾OY(އ e¦(Қˋk’´Àö|æ³%–Óxµd½X#:Í$¡¡‹J£• ¯ 6› E�5¹L1ea.nŽP$Û‚ºÖt;’Í –ãàØ6ÝvÌѰÏ'Ÿ|ÂhØg1ãZ–ÙËm×,VË?½ýã?þ”ápÈÓÇï72Û�ßÝiþõ>×Åõl�†h%ŒÉª×7 ªAÃó–Ë%Že¤¾R˜\š�>xj<3A„RŠéxB™§{iëî†/„ jÅÌWK*®š_@¡ˆ;mæ«%Yi–Ëë­)D¾°–éÐÖ›9ÓÙ ×nâ½µµ"K ¦Ó9ƒþÛ4a¹Xs3 _àÑívÙl¢ Åw=3t}ü02|¦dK™™ü޼,Hóœ¸Ý¢Û‹øäÓ§Ø6\\]bQq:ðá³�� ÁivZak�®•A�{!­fÇ“ey¦xÜNÖ´â-,[šLËJ‘¥)›õš|›àY6¶ëSWš¢ªÑ¥f¾JIÓ”n¯ÍõíÏ3«Õ‚ÇOqr:ÂB¶›eenåZ™º¦YkM­(�”÷Minô»BoŽï™�ÉvKRæ÷‡<|ü¯ï®IŠœM†Fe×0åêºÆ¶ \§.L‘h·ÛÄaH‘åæýãyTy�®®ã *#¶°m›ápÈl6ÛS0ºÝ.~G|’RkC(/ª·Ôï�\»¨+Ê41&PÀÚ�ÎŽPº1÷½5OVU…{�Uw_…)šËÑ®Øaâµ›æ„É ÛÕï]ÁH¶["?@HÈ’”ggx¶Ã4˰#s€HËÚ«év�Wï+ü€ñ/¶…6f2§°¤À²-t]²\ÌÍ4 ®9 ÙlSê²àу3œž0_®xýú5——†ròèÑn®nyùü�NË€Q£.·w37¤Û;DZ0ŸÎØ&\׿pxÄÝxEУ¬5½(ä÷_?§Û°ÝdeÍhô)<þæoþ ËÕ†8îÜS[J¢¨…åØLç ’mÆjµ"Šb¤e`¢Q¡´f½Y2žNp‡0ô Iº(ÌXIlÇg±X!”d½Ü088„t]â{.Ýn‡Vè1�¨*ÅÝí„ÕjƒL ]s0<6ÈŸ8Šªd¶ÈH²”t["J´tlº~Çq˜ÎfŒçk6ë„CšäÔeÉjµ ,2†ÇG¸®M¿½X}úìEñ9Óñ9Ã>”U®è´ú|òñ'´#¡¾’e›MBÐ=¼  È ¶Û­)à•&Qئ*5ÒrÈËŠ<ÍŒßÅ ^}±b1ŸîyO²”¬7]K0:ê…ÏxïýG¼~}ÁÉñÇÇÃû­v‡‡'Ç\]^2_,°\oO#K𔯲’TÊa•ÖÔ“%I’º6ŽÐ´£˜È3y0UQ j˜ÖSÖ›áädyM¥%‹åš*7†¼¨Ó¥¨+¢NÇóÏæ€¢Ðu£ª6G7Œ¯º™\øë#vThsÓÞÆa!…$É3¶IBQ•ô‡ ¹�Œ âãgm§B Ç‘ªªÚ�ºwiU¬›]T%uY’—å>湪ª=A[¾ë’æ¹$HI-ØïiÀ ußÃixh»$V]ÕûǶÛùTEI®³ý8§,Kl÷­ä{WH”RMWývW¶ûZ ½0܇�ŠÍSæµåûÛåš÷Þ{�Åt¶Oª”ÒFÊ·*»Ý^i÷~¿¯ÀûƈQk¤ÀDm«Šÿâhàä¤Àl¶`»ý ¿úÕ¯ø³¿øsÇ »|ßçéӧã¿ýíoq=aUL§s¾óÙ_b[yVÒï÷ùì³ÏX.—¼xù*¥HÒÒØõdYAY.PJ1�†¡A.Q ×õ)òŠéljF²Û”Ó�q�^wÈÝÝ]+<Ç&Û$ÜÝܲ]Îô;TUÅÕÕ7ã;ÓøiU˜qq‘ã7~©ùzE±ÝrrØ#p¦‹9e­8Ž(kÅ›7ÌW)Òr‰"C1É’œétNU˜ˆóз‘Àt:%9¿ääøï?yŸÕ,¥,MüB‘%œ½sÆÙñ ¶.Ñʼÿ�ŽŽ;Jc9ín‡_þüdYN+Š©ë’<7£hÓ gT²Fºf"°Ø¬s²,c6]£”¤å;¸ŽER”,æsú½.¡ï‘)¶®mRmn'·TUAYW{?æŸT€žþäSò²æùËçX®Gïà79 |„Ô\^ßru÷ ›º0©V§gÀ JqxØ£ÖšV·CØ2É«R«}ÎÔf�4q"FK£TIZö\Þ˜îî ×']¯H×'Ã>–0æjËr8c»6ë,¡×�æ%^3�.XÏ×TYJ;Žý6~SäÛlC––TX”5˦ÓÐjwñ—",É“-UYà8ÍTb¹az7åù«×t;G<8=ƒÚæw_¿"P&V¢( „l¾žÃh4¤38IJ]ÖIŠãºœ=8a½^â6YV’¤úá!Žk¸‡e™àE1ª¥$××cмB)“€ZF͸ëðûíß³¢äìtÄá G»3žÜPUãñíËäûÞŸ^€<ϰ�Te\ä›Í€édŽëÙÜÞŽ÷£†<Ï›ù_j"©«œNØ€W+d]¡x¡’²ÈÐ Ÿ%‚Àg4ñâÅ sHH‡´L)ë-YQòÝï~Ÿ¸Ýáüü’4/Mš)š»»;,Û‡õzM†faŠFÕÚ¨ŸÊÊ�pKA_ÇT•Ú›Ë^¿~Ãr±æÁ;�9:<¢Ö’0ŒIË‚Õ6a“lY,V,3ªº ÌΫ¨kË5“ñ-¯ß¼frwK«ÕjF†š¸å7SFš²�ï„ôÛenüU^ÓŽ}އGû%öÓ> -W×ÌKVë-Xß�I²-ZE]†´»Úmß¡+ÞytÆz»ÅÛHÇg±-øõo‡.K Û¢NR‚V@U™Î¥ÛÀCÓ¢¤(rî¡°÷¸­5¥¨)U�- b_kC¸°„ Uâ-‘z™®‘2DÕ5es˜­6K¦6ÌÀ¯ì»TË"p=“ZYm -;ŠÍ^¦6_'É3ªªD!Y’~#Áu6›‘6¢¤Àn:_©ä^‘¶;ЕRl33êÍ›¯‘$ a3‚Ûí÷»­QUµŸ, noo÷‚!D³ƒ ÷h÷÷»=ÌN �ÿ s§¼s-›Àó˜Ü�ùèûO™ÍfxžÇ¢œ5$³Ó0_ó-£n×AʆŠaY⨮k#FÉ Äu�Šôm¤†Á_É‚½°¡. òfáX–¹– )ŒwìÇ?þ1?ú‘æóÏ?çWŸÿ ıE–úLƯY.×t:=âv‹óósþéŸþ…Z(ÎÎÎ ùÛÿë?›èíùœ w>4ò\/à_þå_¨ªš�?ýÏ5‘ºg§gÆùzwCÜnñüùK¤”ü‡Ÿü•™¿W5BH#�¬Žc*i«Õn�#.ëÕšÙlÎv»åW¿þ5/^¼ ÛïãzžçSÖš¢¬ùü‹/±Ìøz»4®cÓî´ ŸÅbÁf³1·Óª&M3?`±\ñÅ_x§THK’å%�n�4Í™ÎfLf)ahò}...étºXŽkr|f fóÅ~¤²X,ˆ#“‡žl·¤ÉKšìšn§Ë;OÞ!jE,– ²"%ŒC„€ù|†Ä(©:­èš4I)Šœª,i·cÎ<äà`€†ÜÜܲÚl±,›õ6! #”4ʧÀw9èu°d�ïÙ$›®gcÙ�W%I–R¡ÉËaÛ\^]bÙFíV×FÞ|zṽŒ\[hªªlŒ�6e3¿ ‚€,ËH“Œv§E‘åxž‹eÙ&žW ×E ÈÒl¯ŠhÛFHÈsã÷Y,—ä;†Ÿï}#=s·¬·„‘‚{MžŒµ“_kCJX¬–ÄQŒ%¥éVT^™�̶˜øM!ÉJ3лC¿”ª~+µn°?ZÐø»l³cr]Zqü¶ |üO?ø€,UJ‰ÝH¯“$Ù³Ò”2½Íž…ØZÏóŒŒØuöc=”y�ì� Fi,!ˆÂˆƒ^Û²xóêus1Ðx�Çn‰dÆ}š¢0�oZƒc[͈Ïd6¡5eQ‚6YCŽm‘¦ R@·ÓAZÖþÿB#µG¡k…FcÛ¶%©Š’,K‘ÒDtGaˆª+jUÑï÷xøà˜n¿Ådm±Y¯Ý�3ÜfwYóèÑ;¬· ¿ýâwXŽMvHÓœ$-©Ò…XÔeM§ÓáÁƒô9ì·xx6âxtH²]±NÖäeа`¾œ!-“P¬êÚd?UÖ¿ÉôG ÐÓ÷ž ¥…¿ÿú+\'àÃ�>¦* ¢0æöö€ívƒmÛÌç ÖÛ Â²ùçþ¿øÅ/q<—^¯�eY,æãæÅuX8ŽÛH¨·hàùóœ_^àº.IV0žL¹¾½ãn|Çx<áw¿û=“É„ÙlÎW_E„8¶…c[{X¡”’m’ l‡²ªøÃ‹—œ_\P×%ÂR„Q€çšØ”eM]— ‡Cúý­v›ªªùíï~G^”Ä­–ã“JÚítˆÂÐ(Ä4¸žK+n�0Cž¥(¾÷ßïûJÃøöŽåjE»Õæàà)¤IÕʸÊm´än2a±Xí—Õ¶ëâ> QuT¨*' =Mf|–QT•) †d2›1�Ï�Ò¢jnûaèóøÉ;<~ø�¼ÈÙ,ç��Öµñ�‘¥)(Í›‹7,æ :í6óÙœÀH³œ÷Þý�^wÀ£Oxþü××wd™±?h¥Èò” 4¢…élŽ6Ó“ö™$æç’¤Æ^WXR ”¹�£«=*©ª›Ÿ“0cZ[ÃòÍÍ–l— ž}üŸ>ûˆ^ßV^^]°Z›$׫Ë+¤°(ÊšùbÍz“’e%Yj ÚÉ&Aê×vY/×LÆSVË-óù’RÕdYJÜj³Z,øò‹/Xþ¿¬½Ù¯,YvÞ÷‹½cŽÈñdž<Ã�‡ºHªÙd›ƒdøI¤l‚ ¾Ùð_fCüdðƒAÙ`A~ HÚ¢šd7««Ù]u«êNgÌ“SDƼwøaGä=E�"�ö.ªn¡Î�y2÷Úk­ïû}›ÿÕïÿ>ÿðþU] $‰úŸœ‘g5û´ÀsCʦáòúÂ×µqèÑê’FUѲۧ$yÆj½%ÍsV›5ë0êt6Ãý3-Õj‚ äh~LÓ´¬×I÷üHÇÇ÷<Ç#ŠB>:ç“Ožs~2'ðò|Ï&Ù’îw¤éŽý>¡(söûÔ¨[öÍ‹ö—3¢Þ§ûN&þä�ÿ=ÿ¤ið<‡J5‘!o6;†Ã1µjxõêôGÄÍÍ’}– bž>yŽ…ă‘�÷ Ç…qT¯7[ž={£Ö±$u­(•Ær\ßĿƑf‡X­b·Ùà8ƒîЙL&yu’îB’n–·+T·pˆ£!®€†¢4òÂ~T±Z­ØlâÁË’¸®Íb1ï.wFí±Ï˜/æ ¶Û ¹4ØÀwŶS+EQfHG`Y-®g�.¡-Ûí¦ó­˜8‹P$IŠãÚ4u‰e¹D¡‰é®»<ƒŽ±hµînòšB×”UM¹Ï)Ê’ÑÐ(ëliãúmݲO¶x®CY±Gè…̦c³Çó#ª:c}[“ï3¶ÛµQÄ9.•%hu‹ï¸h«¥.+\ÛA· Zic¨Ô-u'z��P!î�‰:p¨e N«µùӶКÇÒ*mÀ§Ö‡ÑWÿy¶m›‚†ÙI ‡CsaÉöì÷{úàÁžEÁALày�ë!ZȺBw«öRfî%×CYp¤�í8æëw²ð�_~Äh0¤îHâu]›n£Ôë=JЉ* ´˜ž¾P5�½J);’x÷ÜÙÒt^ݘ°( Êîk´–90á`Û.ŽmF$PU¥ŒLÙuäAÑwi&¨Ï¢¨j*)�¶Äê”mç§Óm/ïbÈ…Ù� $Vk!- [XF¦ß”hÕt¤{Z�ëØxŽË0Ž8???(¯îîîxýî-ÉvÇÕÅ%Ÿ=án½Äµe'pp‘ŽÍdd8fUµas·¡È+ÃqÔ°Ï öùžÑÑŒºVëVÐÎ¥)º»¼¤û¡U] |�žá»‹Ó3¶iÉv_PÔUmT´è†@š�«àš,MPuƒR]G\J|Ïåë¯~În“q~¾àäø”?üÃÿÕ”|ú½—¼|þ ¥j6£Ñˆ²h²¥, ~ìâò�Ê9>3áÚÏq‘®KÕÔl¶;.nî°]�ífG™ÏŽH²œ¹e ÚÛ]Êíí-Z˜Ôéí>'é<[Ží#-�æw+lMUÅž tYݼgŸnÉò”¶UæùUЦnИTÛv°tÛíãÿ~B„ÿ¤Õ²$´ÆŸðøÙS–Ë%Ož<âíÛ·,¯Íþe<ñÍ7ßà8Q8àÿãßg4óîÝ{W·7¤ß¤lî.L@ÖÅ%U7ÞÚîvÄñ€ÿî¿ÿÂ/Œ°�JW(m¡[aÀ‚ZãØ»d�ëH>~Dž—æ…Ú´œœœpw·d:�²K²®EÞ“•AS”©YlÚPæE„ç2™L(ŠŠ,ÏU#3—ß®îX%Ûƒâé‡?üÎOÏ�Ò¸ýë¢ì¼š¼ª»¶Þ¦ÈRÒß#mÍxX¦³í>§ïììn„›W&0M·gTV ‰í:ØÂa21ŒBFà µjø¸‹JÙl6üèÇ?áæý›åÿùñ�°m›'Ï^`µPd%ñ£¿`µÚàû‘ñI©ÛuÙg;®oMZ(RÒ———´Zc;ŽyN„eLÜ ØŽD"X›¤åªÌ¹[mchº+ØÒ‚( ž<æx6ÅuTUqsuA4ŒHÓ_~ùs´Öf»Ý⻓esw{M]}@²TuGŠ¢RäE�eI¯áJ�M’²^mÐMc:­®o¯hš†‡£tKšgh­˜NÇ<8=!/ в¢jÌ ØÂ‚Æ"« ª²"Ž4ºuñ|‡²±È ãù‘–Àu<æã)Ÿ}ö«ŒF£C¼rú¨¦àæ:áäô˜秬W7Ì�f8®Ä‘6ÂÈ[ƒÌw];ôÑ�ÉuÒºS¯5=fèòw¬n,©[}è„úîÆ±ÄÁ[ƒ´:s¨<� Ájõ…ÊøŒQ´ÑŠ}’äàa¼DyžwÊ·ä&°«‹ônÔ�»Öïdã@Õ ´éŽ&“‰7”e'>0òþ²,ñ-“Þ»^›èŒ °ä‡Wÿuûƒüo"úÁë¥� IDAT�V_pµÖ4eu0X¶Ž¹5ö’Úñpd~�®y½*­QMƒÖ-yGóн€À¶;äL¸Ø�Ú  l? �Kò¹Õý|­¶ÀÕ^¥×“”RÔª¥mv«L^ f—jó!tΤ [Ô¥ñÑéºa2™ðòéÎÏÏQJñk¿ö}þø�ÿ˜Ÿþìs"×-,Ήc„R׊0ŒÑXÝøL�BnooÉÒœaÛÝo·8^Hàèºê@¼G8rFhUst4a—lØ'‰¡Î �jÌã²%´(s®øŽmÑêŠË‹K¢AˆeÏyùޝ¿~Å|>§¬rNÏæì¶)BhW�ì÷¤ùûxA<ˆ�ÊEè’&ßù6§Çs�‚Éøˆ²®øä³ÜÝÝqv:çá鉹DÙOž±Ù¬xy‰¸Œ[6¬·y¡yq�ã¹ùÉNrBØ4ªé|`ÜZ1_ãݸÔeÎz}Gš¦¬V+šZxe½·( ŠÊŸºQÜÞ­ÈŠ’ÙlF]íLA·D––@Õ ë͆V[ÌŽÄqLU·Ø¾Ëpw±¾•ñ÷hZ ,…eÙèV’—]‡`CUí©Jc¨œLÇDnÈéLððüãñ˜@•†¿•¦ yn %˜ì)ð|�r‹Ð= ¾ëòîí„L¡êˆ  ·n­æóLGÙ˜ä� Jõrs Do«hj´°¨ŠZEUXJy>–ÒÐ(¾÷òc<Çå7~ýûx��RŠãÙŒ»UÊÿÉ¿cysg¹�Ò®Ê÷l“ñÀì¿léñäÉ,Ë⫯¾¢.êºD× GÓ1è†ñÑŒÑ0¦,÷Xh)‰â€'Ñ#6û,�e Â.^X ¬–2Ï´ª�"ËÐóOÏăww·P›ø�O>yÆóO>âë×¼½¼a<Ç>Wo¯˜N‡xÂØÜŽYÅn-hUe—AL‘Whe<m«L×f[|ñÅ †c¦³SŠ›-·Ë-eÝpµ¼cµ»åôìˆùdDí»8ÒÅ’aàñôùǼ½¸%Š×h\“=fIöiMS”èꚇç§©IÓW F££é1 Øna.ÿ`ºD­)«Š– ]çÜÜæœŸ!dl¢Q¬ÛaHù †¶°pßõ‘–ëì—+@=ªD©–Ñh„”’£#ü&¥<$�¶<~ú„ÿð£¿@JÉÕÕB¦Ó)¿ýÛ¿ÍÇßûŒápH’®p|!lv«céâ''gì÷{ž>}J<²Ül¨•B IU7��O3ò\ž¿xÁ÷¿ÿ}~öù_2›ÔÍÞ�—eªÕ DÇô ‚€ÖD‘Ñχ�cp'@Óqî|ßCHx9yÉn·£iMfJ<Y®VEF‡ø¶… 5sWKp}wk(ÓÃ!RJ‹UU’ìsªª[˜K(놪1FD[ºxÒ6HÏx„šºáÝÅ{’ñôݪîVçq|<3ðÆÕ–¦’deEÓTHÇêé6û}ŠÒÐÔ%mSód8avtŠlÍϺZ®Éö{ÎOçÌgGlîÌcòl‡"ËH¥ÍÉñœ÷ïß³¯RªÖ¸ú›²A× mkQ–¹É©=liÆsX†ËU£ÈËŽ�gY4|` ‰ÞȪ4Ò´Ö‡"pß¹ßw'mÛR7Ía7¢Ú¡y®ï¢Šª¢¹‡ºq}Ïq cшuà·eEñÝ©J�<Ûf @WmÛ&²#TGthTÿ3 tÇ»/˜Ð´Ú2¤de~G¶mQUZ˜‹FÛÔ(iV[Sª2D‹¶©VË0Žñ‡Ð÷YívTYŽc V7·œœ= Ø—¤iÆ«W¯øæ›×ø¡ •´�›¶Å¶]Ž�e‰ïtSèÄaÄ]z‹ªÌøÔxÆ*¦“!Yš Û†:op=Gú FÒoß¡:¡�ã8x¶Ý½Glš*7#ô<ߣokà }ªº Ým99>�Ÿ?¦µ–›-êMÆõeÂzùžap¶96¾ç�%) Pº:ìM¢("ÛïXÝm8OÉÓ„Ö÷yôèëÝÚDy«Õšc¹ïB·Û--!ëUB�Àœùll¸ˆû )\ŽŽŽ™oJ–«�…ªë¬è(+77KÎÎgšñìÑCQÌúnERîñ}—7o¾% °hQ�b<ü�Z+–w;² .®nY.oWZ ËrplŸØ )ò”83 hŠ‚A<`³¾eFd§Ç TU“¦;¢0¤©|�Lxôè –õ–ÝzGr³¤ÌÌ(ô ËÏ÷$~çœ’ÃøÌÍaÞ h•e › €¸—£�B¥i……âCdvßÑ4¶>ìs,)(ëÊÌý»ÝËýÿ_k�ݽ‘”R4ZcÒq°:J@￯Àë1;6‚élŽn4æf~ÊøúºTÙFÓJÁ`4¶`E'¿G5ìv+ü×…6Zqsc’•Ã(âh>c³K¨Uà ™Ÿq<›óù矣•Íë/ß°8?E¤�l5�ªX.o8]Ó»4Á±Áj5AèS—5­RžG­4ºjŒˆ‡ Dz-‡¦Õ4�b<“•YV¡EÎõÕZZœ.Žh[‹4ÍX¯×¨vÇnu‡¤Åª"CàãÚ¶¡zt¾ÏóhêŠýnËx<æîæ–Ñh‚#%Iº#}â8æÏüçf%1¡‘|õêÃÑŒmš°Þ¥x�OÕÔ\\^S–;�Ÿ0_̰l›"7v—(Џ[îh•E‘—è,Ç K…1dzƒQŒ%%Ë¥¡ð?zô€À�ùÃùQd+,!Bcˆö|É£Çxúô!�ç“î²l� ­«ÕDaÈh8 Œ28öšºæëw_þr¨;ßEM³%Œ#¾þöô§‚Ò ë»k²,åõ·_Ó¶šçOŸÑ´%E¶Ájk<Æ£ yºÃ÷”¨±¥Ežíð\A]åÔUia£›œ'�OYÞ¾gŸ =ß�xwqA<á ‹ï½|F½ß³^ÝáJ“�îÙ6y±g4ŒÙîRò$¥ÙWœÍùìŸ~�ÿåýßÈ“Ëõšñ|È2Y#„D¶.ﯘdQ4`6_p·6ÒÅxãº6¾ï°Ù®Ønás³ù‚²R¼zõŠ<Ï™Ífœœ,ˆ¢¥···¤Ùž¬0;×u™�§Ü\]R&)ƒ(âôdAl7;./¯±l‹o¾}Åb±àhjÜÎûÝ xþè„ûïþ‚}^ lC±µ„‡VŠaQB‹çÏyöøE¶çÍ·_s~vÂ`±8;fsg w�?áúúº‹ýÝ#…ÃÅå’gÏž²8yÀ7_ÿ)¶ëðöý%ßû•Ïh*m­ª Ç–¸ŽMQä¨Ú$»¶º%ð]tkä ~@UäÎÉ~oLšfÞ�×…®™(hc)u/}´m[ÊnÜe�aµ¹Vg05ã8MQÝfx‰ÕJ™xËbŸgf-,óýmCõíG`aâw‘Ý�t8š-¸º¸ *J=xhF³EA’íùÙ«/ GÊ¢ «K²,c±X°/Ìx.ćâÒ+úzÉxÝ4x¾AÙçÉ–VÀÑÑÔÈ̱X,žú>ºi£ˆº£Š¸¶ mËd2FZò@`èw4yn µ–0YP›;ÃëóÛ60t|Ûc<�î¶äyÙ] uÕ@kÝ+ꦀgû”FÕ]x¤Qrê >üNÛÖ¢Ö-MÝ ,“TëÂ9?{@Dä�Q‰���ñöâÇÌæš¶b›dø±O£?þ«¿Dú6v¥É²¿ùƒ_3£ùׯù�ßüuîî–8J°ÞåH'f½J‘ÒB«–¦*±�x�G$YB]æÄQ@«gQ�Ï~ŸQ%vk!}ŸZ™"TZ¦šOƤIA‘+Z%D.nnX¯RÎ8^<¦Ú'̧Ê¢Åó>yö‚o¿|Ål1b4?f8ˆÈÒŒAÐ4[� e:ãºÖÀ�e”2ÅNØÖábÚ¨–åjK ¢ØÄÄìw”º2`¡F#mFŠVqµ¹Å÷=ª¶¡Ø®°¥�ïØì®¯�~„�¤²-l>zÈ÷¿ÿ}³ëj[ʼ"°}\i±]]“îÖDAC3i ´¸nÉÙÙ)Óñ¥Z ¥�^@ mšº‚ªÀ³%‘°ðµB'ʺĉcv»Ýß«øü' �%º6‹NÇ1­×«o¾ââê-ûlG¹O�®™¯ŸŸšÊZV9—W¸® Ú»ŠÌøZ§™vFB­Á¶ŽcÞ¨®;a<ŒxüðŒ×¯_s¾˜3›Íøøùcêªâh<'tSs|4e‡¥‰nî½+¾ëa )›å†Ÿ~þ×ÉÕºT¢!I÷8ŽÃh44HŒÕ„4·VÇer4§ª Ê*ïœè.Ží1Û8V€RšÛÛe‡ø¨;‰æ1ÇÇóƒ£ÞŒaÚ.Õ0œ|W’55�ÎÏ‚ˆ²0ñä£Ñß3‘«Õ†²ÌÙ®î\‡Á`ÄÉljT_Y‚c[”UFQžo�uƒå¹ ØçOr<Ÿò½O?á‹ÏÌÑtÌt:æòò‚"ϘÏç\^^2yñâ%ög†mÛÌg vÛ”ÛÛ¥qÜ[T%¯_¿f2™0ˆCÒíe9Äum<×Ftûšº5#3K[ß�öVú°ã9pÒî©ãúñÙÁ˜ ‡ÝÉý,�þ#ëÈéýwçð÷û‡²9\šƒÔ,é=eÐB–øa`º�¶5ã°¶¥i-¾úÅ/¨º�]žç†¯×4$û´»í[H׌oúÇЧ«ö?sÿ8úάÿïŽkx}žçQ‹ÚÄxpÊõò†²Ì´ø¾ƒë9žá G1Ò¶¹º¹)�Ò¦®^à#m‡Æ2GÀÙûpʲä‹/¾àìtÁûßüS’$!IL¦Ä`0 ª’mÊb±àòÝ[ê¦d¿7·—étJ–§Ô•B:‚¼( Ô±yyÁh2&o ¢pL£j°],\êJ³Û&¬îÖ¡`ŒëÙÝ!h‚³<76QãUJk78B�W%^ÄGÇsÎÏÏèYh¶m¤ëU-Ùl2ö«„È�� ¦gx¼àv¹D«–étŠëº"C“$ Ëõ†Z·<:— ‡&¸n»JCÿ‡‡>MS‘l *«ÂwÍáää„t›òäÑÊÍyðàRJ£(µ,²4åÍ·¯qm‡ÓÅ”¯¿y�ïûœž�óÅÏÁO~òvé¾ÍG ÃaŒÖ�1{K29‘å--º‹h‘Ò2#úÖ¢,�Ë?)+Ð>M^âØ‚2φŒ¼Þ­Ñ­EÓX”u�Ý÷¦5ñ+Z6èÃs"‰ý�ÑhÄ&KÙîÖ8ƒ�$Ù2™�Õb;�ž˜¼&£ ´ jÝPä­np]Ûß5¼¿¸Äõ=š¦ã*Z ¤Ã8Œ ㈪QìÒ½ñWY_}ó-¿öð1×WwlÓ„ÑhLU•H«3-ç­®@èùкh ÓɈë‹k\× Ô¬–CÌ|SZ—ì÷ išÒ´¦Á˜LG £ñÛÛ6jOË¢ÊËî=orÀ„õÁx]×5{Uá¹6wwKæó9Ûíÿq UUáIsË–E,GHË ½-Z7X˜4ÒÁ`Àh4"ËrʲƱmƒÈ4EwûD[HÙ@‹ý8¦®�£`:�š'§©¨ËЦ®yôèA7ÃWDQ­BtúÿzW›¶×óк%´]ʺF#ð¢˜&‡4ÏÈë Ú´:!÷*ò¼ìœâ ß !iZYHáâÙÒò±s›Þl6,—K’$AkÅxðÛzs¦eqxÎû¢q‘ß�‡¼È6ÝCWpîw U·g¸pÿͯyù]õY£ž´ Ã�›å¥GGG›‘ge–áIÁbqÄÙÉ ¾mSå®t �¦xqÈÇÏ_`·4F„á8|ôâ9Z5äÅž<+©›²›ñ±ëš©‡Ö aä#¥ ¬Š27ÙWÝÅ×Èû�Ô_tÉ¿EQP´ ·ÌæS6»Ýý¤°¿óãï0¢šƒÀó\>zù„Ñ4B`aÛ¥ëN�&‰¢¾oxO··+²<çääˆd·§j4e]ãúªµh;µ6B:T¥ñ®LÆCò,í²&¦“_|ñ9jh—ûoþ5ûýÞ´ç¶ ðCÒÔ¼©‚¢.†!RºäUÉ/¾~EšgZ„1¶ UKÛHV˶mRS{ÏH^ì‰ÂGã Žã±ßçÜ\.‘€*Ùáx6uUõCŸ$IX¯ï:¥Ì†Þ¡nÑr<Ÿ1� 1{¹4 ‡ÒÆ‘6Ãá�ªã¶Ù®Ç`4Æu]“« ’=I<Ïc±Xp||L^K’}Šj*ö‰q�MyüèÇG3¢8`·ÝÇ1Ÿÿä§<}ô�õ|ÉÓ§�¹[^#\›xST9ÛÄâÓÏ>Eµš7ß¾f›l2ôª¨Á2 4iÛ|ûúËjùí~Õ¶l¶»C½ï­©šÏw¨ºÄEÚŽ¢ ÏC¿ç點ƒ/§óðÆóÒ‰¾ã±,#ñìƒÕúN¦÷Þô‡nßñô1}L�RƯ jqPªõ´Ïõˆ¢ˆÕòŽ£ùœÉÑÔ0ä”f½Ýpu{sð÷ô]{?öº?*û›Át÷‹©eY”EEE$»®ë’$)ÃÁˆÉdJ„&«¯SI¡©s«o:Ÿ’-¾+jèÃý®0Š"<Ï;ŒxÚÖºA¡Æò|OºÛ“ìS²4£¬L~U¥žãvÒyÃø³m‰Tîá÷Õ˜umĶmá86J·TUCD¼{ý†8²Xœ²Û˜ÅûãG�8=9áÝûWØ®ÇÍò–/¿ù†í.åx1£îb5’d‹e NOG)ÆéÚw··¼|þ ¢…o¾ù†(öx¸8ååãÇX–&IÍ>©Õ£hÀbqFüñ˜8ðÕÏÁÅÅóùœ£Ñ˜$]’lW¤ya¼bJõò ”nh[]WÛ¶ ´êÒv ݤîTŸ–% 7RJÜndK£yóþ‚¬,º1¾ÏßFú·  hkÕ%Œ*UJÕ4�ÉŽp]—0FR*¥QOÜÝ­yþìSмF·Ží‘æ ù*çîîŽÛÛ[vë›Í†›ëKnoo¹¹¾äÙ³güÁü·W—¤Û ÿìúÉ÷9Jk¦ÓéS2Æœ/˜LÆÆÙÝjÃÂq)ŠŠ¼0»€p³ÝeH¯!ŠdyØy…ëICH–¢ÃˆCY天Ä÷ͽÈk33ÍNÌqž>}ÊÉ邦iøâ‹ÏÙnV�Çû÷o™LÇž�Rµ^º�Lس£á˜C0Ë2”R¬×ÆjuÐH!lâ8&Ýî:¼dáxŒGž>ý³ÿïG‹·­‰&i……øL�`S¤9I¶§ØuE¡jt­éÍ­RÊÎk µ®õÝ* ½E+w²O3®¯nð¼Ï3;Ž$IØl6diÎ'Ÿ|Âû«+°?þ«/¨êšÑh‚ø|úÙ÷¸¸¸ÀZ ^¾|ÉoüƯs}sÅ/¾ü9yžsrvÂp8$+JÊJ—!a˜#WÛm‚°ŒµÂ•6Ež’ìòNÄQø’ÕMY”e}¾vDh[ë0·mñªÆÁ IDAT×u—ÁÅbÁ]bê¯ß¾!Ž?1�qAˆXÒ¦¬[ò²‚�ÙG7 'ˆ©”Ån_SÕáQÔ •2ïy×u»tbó^„Ã6II¶É! ^kÍv½ãüìÄ„VZ€Õ0ŽcBÇCÚ0Ì(x¿Ï™OOÄSâx̳‡�©»ÄÕÙxD–ìЪê¦e7†¶ð;?›ha2‘f JÕ´­À¶¶#ÐX&HºH«Ñ)I[ï­šŠ¶Q|ôñ§ÜÜÜ0NY®W@ðË ºjð÷�í³]ßÒ´’Ë"7³ÎV#¥ÍlvÌññ1¯ß¼çŸý‹οú×ÿ†/¿üŠd—So¯¾5·Òc/º¬ Õ¹j=׿üüœÝz…°àé“Çü×ÿå?áõׯ)›šFåÈåå%=‹( }]“¥9�£º% t\ž½xÁ»‹KŠÆ,J³¬`w{‡?6fª““)ãqŒëIêºÄóî–k–×KÞ¾}‹Ö‚0pt4g6Ÿ1šø¡‘ò–e‰eYø¾Ï›í×=âÙ³g,ŽçL†ªº ßg´­QC�C¤ð¢!nw`/�98·Û-ª6�ÕxÿÉOq…ËíåHf³9Zšƒ>¯JÞ_½g8åг‡ç8¶ Bà{!ïS,$?ÿùϱ„MºÏ¡­©jC¨î“A•뿊o~–²jК®Mfô¡5Âj]G?:rÑIWfT>Üôï� îw!ý§?„{QȼÙ{Zîy…Š¢0o6,šžßÙ}í~„—$ Y;bȳã9Ò±Iòì@¶î»‹ÞœÛûmî›QûÇpè ¤Qà9Bvž:³à�Ž'ÝîÅ쓪Ê– [vLS Týá9º¿꿟mÛ¤iz s‡áABÓ4�W€lñ¤�çú¦e9e]±Û™Ï-ŠŠfŸuºí”p�ã`‹®u·t¥ ¯°ªÖë-/^,@·lî¶XÀv½#YíXýà7¸¼¾ã«¯¿æâòšé|¦Õf4:�N9>1ûÑoÞ|Ëç?ý u]³X,ðCŸÝÞPJt[!¥Åp¡TKS6ÐJáÀŒ5}ϱ =C‹=²,aµY3šSTЦÑÇ¡nJîÖkæ“1'çgÈΗåy¦+:šLùä“OØ9é~Kš$(ղߗ(½&Їì÷%®"�œ}^Q”a7ØiI]ÔyK»7Ý/–¦Ês6iʪ‹÷ãRGÚì3óºÚ¬¶X–d2Šð—ã£Ã0 ª3¦ÓŽ-¨›¢Û™�‰‚‚È©ŠŒm¥˜ŒüÎoý�—ÏŸ2�@*¶» ǵqk32Õ´ØŽÀêÞ«¦2*)@Ós5¨Çõ�–…Vçgk¨ê†¦.Ñ�"{ÿi»¼ý–£ù Ò¿WýùÛ Ðf³áÁ鮬V%eYP6åáÍV–ùÁð'¥Íø³?jþåþŸ #Ò$Çu}ʲFú�°¡Ãw ºdJÇ6·iq~²àÇùFJZæ8R’å)ÃáÐx::çõ|>gq¼02ß$AJ‡åzE<†!¶qrrÂ_ýì¯ÍžJ˜EïµÕv ·çç§ G!XæV`Y0Æ,æG\¼¿áújEÛ6äùžÝÎa·_òüåSƒµI· ¢˜—/Ÿ³ÛÞ>³£)Z7¤û¾ï3™˜�OYäeÍd2e›ìÉTÆ0ŠQØu¦s2·£ÙlÆ Œ(ŠÂÜ&Ó- ÎhUI«ZlÈK´&ËÅ÷Ùï£#¤<~ü”õòŽ»»;>úè†G²,cº˜’ç¹!’[– K’n�’›Y¾ëã8ÃáÏ �'¸®OÛ´¸ÒÅ÷CÀÜšêª8¶ý­Ù²,$R!‰üÑj”®Z_€zÑÁwLœÝ ÿ~4»ÖWÈ{b³êGa¾ïŠÏ§¿õzƒmÛLìÁ}TŽã8H×Á’Ífƒê ý÷‘–0Ä aaß#^ôßÌ›1Š¢ïìÇúÛíýBw(JóédzÛíøÍü«ÕŠÑpxÀ )¥v÷³©®àr�-LJÚÿó~ cÁé•mƒ�ñâUUux� )‰¼È¨œZÍé™d½^³\.Ù$;ª¼0þ,\Ëä1ÅAˆ-] TKGÑ3’î§OŸ£#°¬–ífcQÌõõ5wÛ„ÿçßÿˆÁ`@� ãâÝÜÜE!ªÕ\]]¡»ÇøÑaÇ TMY °<|ÏØ$ŒÛPEŠºÀ“æuå:>Qäð½Ï^>uÝðöýš7o/Yï¶ ’Ýž»å �ã˜ò~Ïh4b<Ó(…c ŽgsÆÃiš0ŸÆl¶ï/nxòlÄÕÕŠF ´v(ʆª²¥StÝ¢[PÚ¢¨ršÏF!©[A–¤éÞ\*¤‡¥+¶‰±,dy‰ë8L&ÚFø.¾má¸CNOŽ‘,o¯°tk¤å-FµX5ÔZã8a2 ™LG¼zõ l¯=¼G˲4&Òîõ£Ú–4ïÔo]W•—J™÷kH ¤0¹UF-©°¤Dk,ÉvmömÎÑZ¼þ»?þÖ8†G�ã¡”¼~ý-e•“ì·ø¾ÇÍÍ5A`X\û,ï”l5u­ G&[ilÛŶ¢(d8Š|…pvvÆG/^ðÙgŸñƒ_ÿ>?øÁøíßúÏЪáëW¯xûö-W—l6Ž&cÆ“1Ç'Ç4Êd�ÜÝ-¹¹¾1­·gAÒ¶i±p]�ªQ\_]s{g ŸÒ6‹´M²Ã÷l^~ô”ªÞÓ¶ ue3»“ª®É‹!%RîW^aHžçß¡q÷T�¿)!ï;½C§Ö ÛA7Ûv8]œòé'ŸÒT Ží¢µÁãØ¶ƒã¸HÛÆ²ŒYTk³ô½?ì _!4£òê»FÚï¬L²jF£ƒá�x`T}uÓ˜Èr­p\‡ÑxÂtvD±„É ªêšÀ÷¹¾¹Æq=&Ó#ªÊ¤ÍŽFS,é ¤ÍÕõ ¾çÓ¶šëëkþÑïþC^¿~Í_Ë.ÙÓ4 «Í†$IÙì¶,ïÖ Us~vÎÅÕ7×74�¢,J„m bêºÀ¶ »N‰k{”EI‘—D~€îÌ«Ea€©Ïž?ãåG/˜N§l6;¾ysÉõíŠ ðI³=–°8=]`ÑÏ?æüôÏsi1¾®F+†“1¯¿ý–!<Â0 Uš¢(ÉòÏ ˜NŽb‡ÍfÃùÉ)ãñ”ÑhÀ¾Ê8šÎ¹]/Iv)aPU iš²ÛíŒ‡Ê ÉóýA8ŒÐt—ÎD!É>£U Û–Q€Uµ�?Çæøøø°–Â,/˲ĢA Ñac>¨çú"Ô´ßEØÜ/,½ζmd7ºê?úþÿZý×0c?ïðy=Ø«Kp廪;Ù¢žpaü[ú°Ki17rÙêÃ.èobwî‹&\×ÈUûn°iL¤wän`¾Ï8?1 0”û^¦ûÏÁýТÇõ…Ψ2?ì›úÛnï…* ƒXŠºà3ÙÝde·sÊ󜪩ͭWø G6ÒóMKP 7—oñƒ�¼,xóî-Ží³8;ÇÂaµ~ÏûwïȲ샤ÜqùÝßýÝÿ�´7û�l˯ô¾}æ)æà”$3óæ�ª¤š7úÁ†aûÑ/¶~0ìÿÑ6 -»Rµª¥Ò\uçÌd&g2æ3Ÿ}ööÃ>'’W­jPD7o’A2bïß°Ö·ˆ oß¾å7_}ËvµARù”Œ÷÷�³\®yxX�¦m �4ÄmÛv˜Îæ{¬…OS)šù”a,ñ¼€¦ö)«Û ¶Û-ï9>>$/k¢dˆí,)*Óz®Mñm‹ñlÊ'Ÿ~NS â$!o*¸¼¿e0p›±\mY®R„í’ »¬Ä*5R*46Zƒë(¥º÷x^Àf³!+nP¢ëN¢Ø(#Ë’V–`ÙTµDJ � F l{/ì„¶¥h¥™zп~»tåÞü޶A;TUEÝD�¤½a8JH³ óù? X,†Üâù¸®Qsª®¸1ƒ#^,�nÕÞ£f[Ʋ°ÙlX,W Ⅎ.y÷î’ñdfÔ|U�íÆ¿ëjùÞãw^@eY²[oX5äyζØP5Åí½IËü�•`¹ØE ƒÁ€�^~Ìh4á“O>mÜwUÂýÓ÷>eÝÐÔD²ƒOš7X7Koi±ìªôˆ$š<š¦¡.«î�hæó–°)ÚŠ8ð9}vBÓSQì Ê*åâb�e·Ä‰¿‡]îv;Ç¡.M´¯Ö‚Ù|€ã‚å˜îÉ-žkF#ª‘ìv&÷õ{‰p‹n5‹Z¶]XS‹ëäµÄr<Šª«b—æ”EMÔeÀØÂÐÄ'ã±Q…u„ÙÍfÃh4b›¥,8¶`>?4£“v×ù6Y‘b»ÇÇÇH) ′)‰ulIJàávÁfµáp>G© cfµ(YSÖ M-Q¡ÄÒ¦[ØmŒh› )BßÃ÷ŒK¿,JâxF†¬×k“õây8­eHºÅCjYíÓ§ûÙʽ� '6÷•|ïõyª†ûÇþ¡½J®óÁôÿ®­í÷&˜8a}ÿ`ïÁMº3„….Ƕmª¦Þgë¸]ÎýÓ±Wÿµ{yýÓa¯Œë/«¦1¹KéfËÁ�)À¢ ÄËÕ’(Š ›Í?y‚û˜Š^dÐ�'ûçÿôò}ŠêÅ ýŶÙlŒ·- »ÎJaÛ^çóvŒU–f¤Àr="áà¹>º‹í¶…f»I¹_,i›šÛ»;nnø»ø ÃxhÞuËz½¦®k~þóŸs{{Ë·o^ÓH� ¨Ë…MÕhÚV2ˆB¶Û”á°¤ª6<ܯº]ŸM–e´Ò& „¥™ŽfDQB%¼C�º¬Y.׬;PðüpF¼¾xËo¾ü ÇLJdy�°#V«•!R¸žïáG!Ó8f>Ÿ³Ûí˜|£ªª(ª‚ÙlÆÍâ�0 ‰ÂØH«Ó-¶ëƒp�”®{GPW vç�ë±QQc dzhTCÄL¦3³;ܬi[�ÚUè¶ËÆyRØÔM ¡‡e vyÊÝýšŸüË. á`Ìp8äÛo¾f8rq}I˜„ÜÝ=v²é®ã3›19::& bž={FÓ´f’æhÕ2�� دC•äyŠnÍ ªïj„úˆìFÞ«hÚŠ¦iõ2Ûº¬Ì®¨iñ]Ÿº’û݃cJ¬Ù5È®ÕÜ/îY¯7(-;#­cäš–CYÖ ’[T �¿äìü”ñÄ,gÃЧljêÂH-�nÉk!�MKº[‚ÐøŽéh\ÛÁ±šºEÓàyÆYüîÝ;ò<çññ‘º®™M¦Œ‡ClaU½?ªª ür<óñ'ŸðåW¿%+ ¡Áu}†ƒ1qҔƓîrF£Ó.œO)¹OŒÔB“eÝ‚¹n ñV6¸¡Ï Ò̶ë U[£Z3ÆkIÝ´f‘¼ÉÈÓŒÁ Æ9œ“E‘§·î³æ»�ž×CV;Ãq£»-�@?élö²fô÷Ïö QàéÒÝÄG8üŸ^"`T›},öÓî¡÷ËÔu�ÒH O/¶þÍ×+Úú΢-A`˜uí‡ñ§_»dôÐÓ Œ§Ã±L¥y||ÌdýÁø£ýoð¼€V�m{X¶ÃÙÙðÀ˯ºÄS‹Ýn‹e ê²BÖm+M7PȦF+Sa[hôeœ˶MÆ„ëaÙ†1ÕHIØž‡lŒ -PJcc™%dnfö–0T`”ƒ$æøè�ƒ£C¾{ý-Bi&ã­l)‹‚V¶l·;Bߌ%”×u�U�ç:ÆùëX$q‚Ö ¡5ƒ$Ás�ú¬G¶Ìf3\×Ãs|šZR”eYó¸Xr}û@2šPÕ ›õ†0Œ ;cjÓ�îvØ–à“O>!êÜÇ»íÛ¶9==e2™àù.²mÙíRêºÁ÷¢(¦i[6Û Qš,Ï€Vµø��ÆH¦=?@6 ÕšCk»Ùàºf6ìû–0?SY×l¶�+6›-e^u4d°]�m[¬—+Tk–£®c3�»Ì›0ñ\Ï•¥¤•ƽއÐìÓN» ½ÏúǪ±¾3�n\§¿ß===œÁHØû=RÁíeÈ'®?ŒŸ\UÛ~PžY–™‹+ãó/ªÒ˜UÃ`ßÅLuÎ÷V6ûÏýÔÇÔ_biš~ïbzú3t©Fa‡áÑÁTEשõ‡®ÒfGi"¸…!¸¦�ÄM4%CW\]Ý"•ñ ¥YJ–å�Ç/~þ3ßç/ý—,–Kj;2™W«m·£pñý€Ñ`ˆlZVË5Ží‚0�{M£h%x¾¡„ â˜,+Э¢ªj²4%Š}ÛâæöËÒ„QÀj½ ,J¢$¡m ZGi°Œ( •lÒ´ûyIÉ€ñ a:âØÖžø\65ižóí›×¸ž»ß‘ Kà�Ì�ç{8ŽevPID‘¥�Ë«çÈÆŒš¢ªº¥½¦,kʺFc\¢c$Z–Å Ž ÷é´-IQäU™Ñ´uSÒÈ�¢ª+²¬ ¨©q½€¯¾úšëÛ6Û USpvþ и–ó{žá{®k;UC]W,l»ˆ.êÝfD_$¹�Y±„‘馃×÷¸¾¾åÅ‹—üâ¿`»Û!óù¾ÿËv@u]sssc2ÕÀÿç�ÿ˜ñlÎwß}Çb±Øï(æ³cÆ£©‘°æ9Fô·Sk ,ä~ù f´£„a:õ#…(Šö³ð§Õ\?˾º¹ÁvëÅÇq8œt$ƒÂpG啲E#‘­É„GÒèà}×øš¦!ÏâÈÈ„Ñ÷w+<Ïb:› ¥äêúý>úÛ&)T;z?Sßív”eÉz½&ËŒkx™V= Ã..Â'¨k~ûÛ/º¥¶ý=G¿î”ZA`¹ÅbÁp8Ü+ºŠá�ívËp:2Bš¼DXp|x„eY¼»”¸ŽBuÆTeÛû}­Æ| Õý䆪jH’!ÇÇÏx3¾@¡ÙíRó«5ëõšÁààw]-ß{üÎ (ÏsZÛÂul¶»”ÕjÃß¼6™QD«'§çŒÆS®®n:S¢Gxä»Ù˜7Ÿë8„a°ÑôŠÝ-l…efÿý¬½a(a¡-á¸XBsqqÁáá!Yš#„`˜ ÷UC]V$Éßó:�¼Bèt‹V’¦.Ù¦©©€"oHâ1I<îp%…YN·Ï‹P­Æóc¾í’7mÛf…h-ˆƒZEÄaˆ–Úàð»Ùy]Ô첂V Ò4C¡)« ©4£��ûí² ×qŒFÌf3F±!;4]ªg�|�eÛ`ƒí:DIŒJ5Y‘³ÞnH¢!“É„Õrcø_á�€:‚¬(L·“¥¸Âdz�,öuVàù»õÖ„‰iÉd2"p]æ“)³É„º2YPišá‡1“]NY–Ü\]2Ï8;;c8Špè01Z“hmT3®vËn� õ ŸZ~X¤ï;ý�€ÝôìÓqÖ?å}éí§Ä�¾3xÊeÛË­ŸŒºžÊ¥ƒ7%;Ê…ëºE±ß½<Ý¿ô_¿¿0{^ÛÓÏ×ÿÿOM£ƒ(f4C+(Ò’lk°G¶Ýãt¬Îw¡÷ɯ]¿ƒÖ ë‰âïéÏ£—V÷PÌþBzjŒÕZ£4M‹‹!.ô‹R õäw Tç¹j¢ÃìH)‰ËÑøÚ¦Q× 9{þ?LX¯¶üå_þÏž=ã?ÿ9/ÎÏCŸÝÎáøô—7×Ç¥­Z¼h`äûÊL0¶Ã| ü�ƒVKxØ–±É9v@Y–¬V[¢ØÅuŒit˜ëCx”ÅGXBóüù)/^¾d¹N¹½}DÊŽe©²“³„QHxø¾!=l6æqÒýÞsÞ¾}ËÃzÉýrAÖTuN2Šh±8®¡ºKÑ4Yžq|xÂl>`»¦»h2FÀ³³3ê(Y§ &"öŒ9¶iZ,ŽklZXÛë-Çf8LL^�*yóî‚8ñBÆ1Žk³ÙîØì¶Tµ"ϤRLæ¾ob=j]!Uƒ’©%UÕPt¤ìrvÌqÛ�˜ž\@ýå`Ûö¾rŠñéÇnO·ýíº.Žo ³Y©›Ùq†¸A° ö¡pO•m½Ÿ¨ôc·ý> öJ»>·¥~ÀÙ<{öŒÍfÃû÷ïùë¿þk¦Ó)Ÿ¼zÅÙóçûtYK)´îGp ÑA^›Vb«䃧>#º¯ß«ùzŸÕSµ_[WÇAØ� ÔŠV¶(ا¥ªÖìÚúï×õ}\Ç¡:�°Â÷-¬VQ%yYãû.§g'¼|þ?òøøÈÁlŽ%4_~ù[ƒA·®^CSøA€–5�¸ŽEQÕ ãÄL@„MÛ6ض‹ŸPù´*¤)7´�2¨¡)²€á0!8>`~hºI×q(«MKÕ”XŽƒÚl¶)áÀx Y‘Æ_—n-|aáYœÀáöþ–åêl“F{y‹m;ŒGS”%;I< ‚Ìv 9?+rÞ¾{Ãv·&p=Ëæºn8>:ä£WϹ¸ºÆÛ””yM£:І¥ÐRø£ñ€ùtJUdŽMºy (sêº6L™b ‰j=&ÝÖÖ.X®g‘ g\ß|KY×Ìæs«wHÙ0�öE“j— ª¶2“×�"ÇqNONL´GÛuf¶ -Ô­B °]‹FI<ËF´Šñphÿì¢ÐѲ©ùê«ßRW%aè™®­x¸¿e»Yq“^³I—|ýí7æ ¶lê"ç`<Âwl®ß¿åîöŠVÖx�Ão¾ø o.Þq»xàöá�wï/ùÍ_âû_}ó A3žL@ؤE�4J ‡8žËbµ!+ âÁeY¼yÍ.Ï‘]$õÃã#µlðºµãÚÔu…T¥ XX�«m«°‹Àw��¢lÊZ²XïhZÍ`šS–«õ†Ë«kÖÛð‡Èëׯ±m›ƒƒ»4eµÙ°NsZ‹5ÁhLkÛhËŒÏÛ…V“§;šº2á�¿$Güê/ÿœ´ÈQ×¢pHžW,W[FãêZQ7-­¶™ÎX®6¤YÁx4Eª–ùÁœÍnKQ¬Ökîîî°\ŸËÅiÙeAV¤hÝ eIà ÎNxùìÉŸÿÇ?)Z“½|…Ö ?p±-¥l²¢f»­(KMUÁb±a³ÍIÓŒ““gŒF#Þ¾}Í|6ÁuTׯ¶k£!÷�DqD2HÈË‚0ˆŸ$޹xû–0 ð<¥ZrhYx–K]8BkŒeÓÖ5UYstpÈãÃ=žëq{uË»w·œ=þÏÚýn#êÙÉ>Ò¸m[,[ ,½ágyÆn·åññž««KV«GËqäS”9¢mñ|—Ûë[Öë%©Ú²X<!7wX ¾ú‡ß¢[ÅŸþûÿݶø¾K«[„eñþìO–Íïÿø'üoÿûÿ�V‚Ó³sž=;#ݥ̦3¢Ø,›Î0å÷ž ÕR7×wñ|�‹÷ﹺ¹ãêúÊäé�¹5Ætå86ëÕ‚V5DAHQ(mVS‰BºÙÒ´’,¯h•¦i¡®[,ÛDz=–Ë�1œ*�Ъ£Í¦3ÎÏžq~rD•gYÆ 1�t£á�V™ÑÕ`0àöö–Õz½g-ÕMM«®ë˜Š Í`0$‰cò<§(r|%M´®ã:”EÕ�‚Ìʱ�ô{±ÍøÛ¿ÿ-·÷÷¬·;£~ຂÑd@‡�Mø 4UUÐJ‰-l4! É`½Ú°YoÂÅóÓiv&6Ûh¥hû}ŽÒÔ•¤ìè v7m;ȦeÙ8ŽmÈéO—ç€R-­”Heºj­Lùi:QµW´õ¿“I?½µmKÓš\˜È pö\µ8ŠŒg¥‹Fèw,OÿÜ�±Ú.ÏHìÎ[Ó ”Rx�÷Èêê0µm èóh~Ýè¬7�†aˆê¶W×W\]]ñðð`þM'eC]Õ{2ñ`00ø¥nr`Y&rþƒuáû´ÏóÌEª;I·e™]¤e£…E« �Y[F𣻈nËv¾'…WJãºf‡¡ZóµdÓP•%ÃSªeGl·¶›Óé„¿þ›¿¢m[Þ_Ý¡”$CæÓ �gâ'Fƒ1Ahö¿“é˜F¶ÜÝß cjY“nWŒ&CÎN˜ F¼¿¼$ŒBê¶a2�á86ûWEUØ–`—f, ÊFÒ AÑ(Z ^Òª–*ÍL€£ßsc¦“ü‚ÿþ?#Ï<ÏG¶Š¿ùë¿c:›³\oL^PUã:>YQ°X®X­Ö„qHÝ4 †|×a:›Ñ6 »tǧ¿âíÕ ‹]Á63çÊpã{6º­˜Ž|ôâ”ÄwQ²áæýUgE�$òò£Wæuƒ"Ë cß(%EÙ²Z§¬Ö;Ò´@udŠÑÐD‰+ÙÇ!yºc³ÙpuuCÝH‚0ÂvŒ˜"Ý¥Äq‚ïùØ–Íd2EkÅr±¤ÌM¢rXÂ&òCƒ¿³÷ÒŠÀ÷ $qÌùóç|óÍwDaÄgŸ}Œã…ÿ2ÂÕí5¾ï³\.÷¸×µ÷óã ðð¼d?K¾º|Ç|>çÝÅ%§§§´¶æ7ÿð[,l¶›ëÇGî®ïøüÓ²Yî  †ü«ŸýœírÁÍÝ Ãɘl·ãüÅKÆÉˆÙhF¶ÜQls’(¦*J®//¹¼¼d<1�ºEè–ºªˆ“�Åò/pѺEX�ç)_}ù%ëí�"Ž|Ï¢LsòªB`¨¸�ëàx.Ã$Fn*\ÛŒ´|¯35ú‚À‹AÕ =ÚVP•-u]�¥†g§[�’ŠÍvÍx2d”Ä͘OçЖ|ôÑGûȉårÉb±@ØÇÇÇ”eÉt:åýå%D‘ÁéO§Ón<äpsS2˜�QÇûQËÃÃaBÅ1ÛMÖf1HBtÕ�e‹ÕÒÂa;”uMDQ€%$ã‘ÏÁlŠ@±|x¤,J4JIF㘲lØí –«-¶U‘e%Q1�ȳãñÐŒžªšt›â œ›âÑZåÞ;÷íÅ´§i—ÍþÀ3—G·�‰ˆ6v>OU^O ½"í©Dºª*ÊÌÈÔ“ÄŒ{ú¿Ï²ŒÍf³÷õI­ýssº\”¦»TlÇÐúÑZûýe†{¦›iÖ6ßõŒB¯ý]Ò#�z5ž×Ö­×knnnH’ˆ$I8==åüüœÙl¶ö£UƒÄªöÏ¿¹='¸®‹BlÛÁËv�hZ­2ñå�”Xˆ=éÝv�½7¯ýë9aUÇM4@ÝŠdu¹1)kæ“)ïÞ½e2�buàÖW¯^ñ£_üWl·[¾ùú;®/o(ÊšñpŠë¶» eQ�P|òég\^»{2¸ŠCìN¸'!u]¢T´�pùæ›o¸ººb±¸Ásq<0ã¤JQ ®mÑ6-ùnKExI„, D+ñ]‡ƒùœçÏŸspp€ç¸$QÌp<Ùw„óùœ‡‡;¤¬©›’áhÄd2b—gd™¡¨DQ„”ÒÐ7&ãýkîøø˜ ˆ lU!Ú­$ÙV"ëß³I¢[¿d]U{àr_P…!b—²iÙå¶åÒ4Š4¯:O¦y…DÍfñù矓[.Þ|Çn·£n,´ðئ%S/âq‘’í6(msw¿$ ŒûÙÉ9‡¢4;_Ýj¢(ÆsÌïÜ쉌˜$ C‚(¢–ÆãøñÇs8;äàà€7ïî~×Õò½Çï¼€d[£kÅz½&$,p]—4ÏÌü¯m÷s �7oÞ0M�F(ÏçáaÁÍÕ-ggÏ:!¿øoþ[n®!Püâ'?e2œ1ÿË¿ý_ B�åfÅ¿û“?¡ÈrgsÎOž‘5¯¿üšl·ãñþž7oÞpwsË�~ð{Dq@[wj±¢ÀF³[¯NF¨ÖHŽ¥lÙnׄ¾Ç矽b<0Ì­a*êñp´gÛE�¬+TSƒë�9E–w³v ­\²¢@6u »m†Õ¯H]VØÂb<ò£ÏˆØØn®. =£,IÓt?c·m›¦ý�$æ°Î²Ì8ÓëÚ¨øq‡­¯Mœv犣Yf‚Ö–ËeÇmò©ªfÿ5T7{ÿþ=`Ôy¾ïs}óž(òH†.ÉÁ<¡i!/+¬î€Â²)ŠÚnÑQHQ6†8\g¤aE’T´Rs0ŸàÙªm°°ðl Ù4´Râ%Á~ñÔ÷ÓïSžVðfÑïxÀžãÒo<´ÖXOD –eŒx=1û)5£ïTâ ÜŽèúÃÿižÎSMÿy‚ Ø»5tc[— sˆ÷»Áº4Y+^G+p,sY¬×kšªÞSz!�ëzß“¥÷Ïk±XpwwÇr¹äáá�óç$IÂh4ÚÓ³{Ùy~@û?Fôòr³à,3›³tâW�äÛȶ¥¬«ýóyú{’m½ÿ}E†ç™ôк®MªoPdù¾“,Ë’/^ìMÔóùœ¯ß¼áÓO>ç`6çíÛwl×;Oýˆ/¾üÚ`ºF#~ïŸp{{Éb±KÁ“¬qíÄüþUKU”øŽ‹–-».DI#fJ’„(ð)ëœíf�¶|lË¡m®-³ƒtÁd:âìì˜W½ ðý½ºuÐ*ʲƱ§'Güíoþl‡,Ëö…‚eYL&’$a½^rqqÁ«—Ϲ½½åÕGñé§ŸšbƲxÿö‚²±\—(ˆ©ë©Ž|—‹×ßìMW4˜âÑx€Þ¾}˲۱UK£,Ñ-,×Ç:«Bç£|\¬8::àèp‚°Z<ÇE`3šŒ)«ÙB#�°$+$oß]‘í¶F�0òGø‡œžžS–%oÞ¼a·Ûø!ÚÖxNçÁ”�ÙW:vWˆäìv?þñ�Ù,7\\\€þeÐÍí-«Íšo¾ú–ç·7|òÉ+â$ÄrB˜*Sù˜JÅs\Ò4åWöKNNNp]Ÿÿùú·œ??ådä!,‹å´}EÞìMhE•sww‡Ô†xm{¿÷Ùï1MywqÍ7_|ÉÑé3qDø̧fÉŽ ªšºÄu,„…ɲ÷ª²Ù+‘Žg(ñ !‰"Ï"°Ÿ5H§¤k놫«+dSá;6¾cS ÈÒ�‘ƒ*Ê'+J“À¨Ui*FÝÉX•4UUì{ BÓYȦb·®ÐÒä€ô®ùY²M³ý®_$Ÿžž"„Í»wïØl6<;9BÉßÙl¶øþ#óÙ!Ó©¤,o÷o ß÷9<82Š–Ê(ø²|‡å†]‘�í:ÌÆc®o¯°]Ù‚°ll/d±YrGà8jØcëIÙ¥A˜ø¶ëJ€4oÔÝ.ñ˶ÆÒŠùdÌ|:#bò´ / ,Ϧj›ýeÛhum¤®Ž÷/Ó|¢óÁX]ª£xâ±á‰)µ—M?•v÷ºv×aUFñ5 �ÇTUÅãã#išîÇX=ß­O‚ì‹)%q7&ê¥ÑOý6O»±Þû#„�²ö•c¯¶ê‹‡^¬ 1HÿozäIûJúõë×ÜÞß1›õá|>À¬æòìŸSoÀõºçe£Ú}Ö¬�ŒjP° z_¶æ¿+Y£„¦¥E[æ°.ªŠ$Š�J¢µBkEÓTHY£dC]¡Ñd2âõ7¯÷Ñ,_}õ a”°Ýe¼|þœ<ÛòîÝ{êZò“ýˆýoþk†ñ€_ýůùå/ÿœÿägLG#Ê4åôèm5îÉÉ1?þá+n¯¯p]›0 xyü’¢ÌÌHk4àùé3Ñ€Àõ MÄòyX¦4 ­™ Íû+ßnq,8>9æÓ�_r~zBG<<<ðö»×¼zõÊ,ÿ7Â8ÑòÙ§³Ks®îoY,$ ˜ÏçÌ&†¸]?2 X/Wœžžrqñ–Ï>þ„üàüßÿçÿEUèÖ¥Õ ¥,�(C)�ÅnËbñ@SV4M‹6¾ã¢TC‘—\V7&8α�V™ ˱ö~B�b¹\quuÅ 1¦êétŠe»ìJXm¶ |Ò¬Á² ìÒ‚ºn©«-ªÕ¬6)B@èE<{vÆÒ[P;,Agê·ñ,©L§Ý4Íž�hY¯/Þ"„`0øç]@¿sÔÒ°\oql‡�^}D+‚ÀïæÄdiªDã±@ÜÇ 6ê©Ð ˜NgBXT�Ü_ßr{}ÏÍÕ-ÛmÆw¯_óõ·ßpu{ÍýÂì�îx||4̤ & cB?Àõ\Ï@ú¦£1³éK˜<ô¶5pM×qY¯ŒF#jY#€FšÝ…Y gäYŠçØ  žm�nq-‹Ùlb8F£QšåuQb ‡ÓgÏ™#„KÓHªºFJs�ÚB › Khfã!£aº…¶ÆFÑ4%Ûͪkß'û¬”aÙn’$æÐíÃÁ`¸¿äƒÀ7’í$ÞT³Ù¼L�ÓÝTLJ”eÕ!ú3Ò"çÝå5R)Tçù©ªáØÝF!žï!ÛßóðƒÕj¤l±,�Ð c&³l×§•´qö§»E‘ró€V ƒAÄálÆh0Øïã8"¯Jª¦þÀ4ë.†¦1» »Ë½ù€ÚQ*we„tTÛ¶û�Q É®[é}cÐyY:óë|:3Þ§.«¦�ÅqÌÁÁÁ÷|E}GóÔoÔJ¹GôÐuAZ“tÓ4Ý¡k’OµRûØ…À÷i›Õ˜�TÏ~뻓¶ý@ý‡¦âo[ªªÜËeƒ / Öë5···,—Ëï™gµÖ{R‡òÝG�™…Fv",„m#ŸH»�={¯ß�Ù–9l,aíÇržçGöOAðîâÓé”Ý.å׿þ5ãñ˜åfm (Ïe<2ʼnYUÄaÂÁÁœƒÙœÙ|Âj¹âïþîo‘mƒ\Ç% \þàç?ááÑŒuNNO9=}Æw¯_3H"^œ�q||dhR"l?ˆ;¹´¦(:Š¿ “ˆÓg‡|úêÇG3†qHxüͯÿ )¢("ô#Vë5u]qx0GØ6ñ æþþ‘A’ðâå NOO$ŽmóðpÏÁü€Ó³g<ÞßÓ4 LJG´mË»‹ ʪÆq|Z)q,Áh0`û´²&ßm)‹Ç6"¨~<\”æ|id‹ëUM«�ÔeMÕ´hl”6&g„Ùñ)­ð<‡élŒeiÆÃǸ}XQÕ’ÓósÒ,¥j,!¨ÊÏs)Ê‚íz Àl6e>›áûfoë8RV´ªŒØE P]1XVMÛS²Ùl8::¢mÅ¿ptsÏz³#ðBnî9˜ QJ⸑�ÄÃîÍi1›ÍÈv9?üá—o/¨Êš/¾ø¥?ûÉO¹¼¼âç'\½¿Æ²òº¡ÚähK�LFìò”V+Y�øA´Ï— \‡º•´­"ô\Žæ¸=’�„4¶ÝaXäW"emdÖ+ƒøHâË2 ,´‰×(Ð&W½ÌSqˆ-4®šùî áá΢®¥ Û "ÇŒÐÚºÁB¶mQ&‡ãóO_q0ŸðþÍkÊtƒ´y¶5ŸËKF£Ñ>ôÊ÷ýnÌU‚u0›Íxxx@JÅññ1Ewð̦4­2é¯uÍb½b2™0=˜“_^¢€]–™XŠ$Áî"¤±áêý•ÙKXf´òîÝ;¤RlSC¿\ãEBCÆ�C¾Ý‘åIä� âÄÇr~èñìì„ápÌÛ·oy,KŠÓ³C^}tÎÉñ¾eQ¹©Ê´ù}>uç¯Úyâèï/Ÿ§»Œ^Ô` ë?{�>e¹=5‚>e¤©îL],ßûûÔsÒz#p?R~ú¹…0û‘4útü,+Óµ MU›C¦û~Ë&ô}Öë56Þ>±4Ïóý¸Oc.¥<7ÑÕÃá°3º–{ŸNÿùúÑÚÃ÷··DQÄÉÉ ÇÇÇfœ˜¬«^BÞ{˜Pš¶ùp¡«¶…VÒj�BA«©ëÒ$kkÿóhëö{û±8 L´Šñh€ï¸Ý¨Òæñþ¾»4cþâ×ËÃb…ÆU ²ÁsÜÎû'PmC]äTŰøìÕK..ß³YÞsz|„Bsv~ÎÏ~ö ^}|Î÷D�˧Ÿ~Œìøkýˆ: ©Ê†¶iȳŒ ŒÀá|FYK¶›ÐDžËpr4›�Ä>¨¦#xX\^^2�NY­64�…i)‰“�ûÇ„åz>óéßs(‹Œ¦6û¸"K <Ÿ<Ýq~z°ß7–e…%ežstxÈóóSNNŽpmÁÝí5ww·&q2%/KɈ›»{Ò¼Æê.ü±Å¦lš¥e¢ÐÙÑE,Ï iê×±öûAtÍp8DÛ6óƒ)£ùmÁ.Û"4¤i‡ÉÊ5»íTËõõŸ}ö1ëÍ’²Ì±›étŠV ºhÀ2{ĺ6á�eY‘f–íâz.®ÐHÅ?ÝÛüç�ßy�?Å¢¶ípw½_€jÑU–JtoTCGu‡ ø½þ>_}õ_ýæ·8ŽÃjµáìì ”âã�>á¾øŠ×WxqÄr—òõ›o˜ÎYmW]Z¡Ëù³sÒ<#‰K\ËÇñ\šÖt:Z™ 3ZE£JÚu2ˆð:çw_:žÛÍ'7äùŽá(!ô=v› ùvƒç9ø®Kk�Ì+†Ã±It<²ÝŽ(ñ—i«e·Ð+ B—ápÈóçÏľkÓÊšédˆg[,oñ=›ãÃ#’Á›,Ýw=aî�ûŽçïóY–„!u]“çF¬`ò{šÆ$M�ÍÜÝÝíÇI×××€™ù?<<ªs·Óð}ŸÅbB1›O ˆß~ùµÁí ›ñtFš®QÚæþî�›ëŠñȤ.z¶�1Ës¶é´Íx<ã`vˆÖ-¡ç2Åüàó�™OGXZRd;|ßc�Œ¨Ë†,ÏÑ݈­ï.ž^@A û¿3—TW½«°ÍÞ#$„€'c6˲ ýpé<}ìùmŽ»÷÷…Q” ‡CzŒÍÓDVø@èwFýî¬ljd#qÜF‡>›¨ŸáG~ÐE×;{%i‡ûC¼—hA@šŸ›ïû]Ä|±ÿšOÅa~Èòé(!EQðõ×_óå—_2™L8??çÙ³g{R_M÷ªH˲:é5ºiQÚ¤äæyÎ`0Àî¾ï ºCØì˜Únù¬µ&Ë2Ã-‹ã}G;Oøú«o»Bøâ‹/Xm6”•$Œ#daíS�«ª"bž�st8çþî‘Ë÷o�ÆÄaÈgŸ|„íz¼~û†?ùwL]þ‹å#aèâh›ëû¶;àØoß¾Ãw,’ÈüÜ]¯%Í2â¡ÙK:¶àÅóFøóp‹jR\«ÁžM%!®ks~~Η_~mÒˆó’ÉdÊh<àááŽóóSnï—ÌLXäòá�,Ë8<šsvv†çXd;ƒãÚl6<þœž˜ÿâÅ ÈfËátBd›5Aè1›L8:œ1šb¾®$aÓjÅf½Ãr=Òn·ÆÊÅdŽIcÕR�ؾ‡è’}}×Ù§yЦÐ>99D¸æ,(оçQ‘°Ù®Éw[>ÿüs¢ÄçöîšÅý“É„—/_"5&- õÐÂÂv<êZ’e9«ÍŽ]šwDóšF2ŽX¯þy‰t¿swþââÁ„ÉÄÈ…¿ýæ7 `wù%fù´\®8??'K�*d:ž µ&ò#–ËgggDhæ‡,7[þìWÿ‰‡õŠ/¿ý7¸}¼G¢8:9"Ž#’Á�Ï?ûÇqÙíR’aÂp2àþᎺªŒÑ2Ž 3g¬ª Çq±-‡õvm²ß‡Õjm˜qZ‘e)ëÕ¡ÍhÅ÷\sè`W=K«mUft©ÊÏxûî©ñ âÓO_‘å[Š2åøäh ß³�²$K·¼÷–ÉhÀÑÑ Ù˜¨‡ 0žE[ÐÕuÍp4Þ/—£(Úï6›-Ûí¶;Ü|×q‹¢¢ªÌò×$y:\]]±\¬H’ļ¹ã˜étcaE¬¶;Ò𯿜z¤O¿{1 ¢j'm* IDATøÐ==5‘ö€OÀ$îv´ƒ¾(ó<Ïtjm»O‹ÔÊð•l ‡Ô•Ü}«~ˆêî€æ{j÷—‡Éó‰F8¶ÉŽÒ lËÁ±]<×D‰\_Ýðæõ[vÛ”$0Mp]�¶5ßwO!‘­Ù5X�·È,ËEŸ!ð=¿#ƒ˜ñ´c[dYÖu7Fõ—Ä ª‘„�OYT$qÂÕåq2àýûKZ%xÿþ�M^Õ <Y›]Åp0à—ö§œ��gf¿Ðg}úé+¶»-Ù.åóÏ>ã_ýüçäù–ÕâŽõvI” ©ššåjƒ†ìv)Ji|ߥÈr¦“1ëÍ–0Š)ŠŠ²ªð½€¦nð›VV®Ít:  o<žðËÿøŸÈò�Åd2Åuʺ4{[%�fµ6ù'Âö°w_1·mËv»¥¬*v»Ýý2žL8==åøø„ñx Àf³åþþÕJ\×äÕËnÔ†²=O©ªŠ$°^¯9>>îÆ7.R¶„QÌjµ6 j!ÐXlw;Ê®ÛîVd©º–…kÛ “ÙHªº$MW¤éË6]¦çzh �Ëîïo ‡¢Ìð=¥•Ù¿ÕKØ”uÅ&Í)»ƒ×ó¼}â§ ª³Éòìñáì½Ú÷;¡ÉÒ”ëë+¦“Ï_<ï:Ó Œ†¶›5Ï_œãØ6»tÍwß}iÀŸžÏf—r¿\Q%`ŽZÓ"e³Ÿ.¸¶O«5²1ÅNàø�‹m)†ƒ�ƒsÉxžË|vÀ¯ý7XÂc2ž3žL°�” J7´ªýÿI{Ó»²,=ïÙ{ŸùÜyˆ‘L2™CMÝ–Ô’« [2¨eA–…üÏl7à‚-ÛÝ’ÚRKÝU]U™•3Iƒ1ܸә§½ýaŸ{L« Á‘ ä�{öÚk­÷}^„Öã' ÃaL…œ.çdiÂÕ›×¾Ïç?úœçÏŸ¡”âÍÛ+^~ûww÷<¬Ö¸ŽËb>g¹˜á8Óu4MMÚ?sMÓPeYÇÚÀ]ï Œ‡TuMÙ4Ð ZKµ—®ÂQ]×0_Lɳ=Y¾ç§?ùŒ¶+Ù¬ïyØÜÓu-aø.ÆXš¸§$Qì3ÅÌçcNO—„�OÓÔ´mC§[”k˜ËÅÌ^Z¤KYÕÔUËÃfKQÚiÍj½áôä‚‹ó'4MGýž> ºêPŽ�åEá�/>ÇQ6báîî­5?þñO ‚ˆ²¬ÉS ¼ûû¿ø/ɲŒ—ß}C’îxýú{~ñ‹_�9Û4¥îZF“1Oçs¢Ñ˜†–hØÄÎ݆¶®ð}�ív˦ÝДY‘’e‰�ðm$ôd:ÂõTÍý-W  µºß°YïY­6ÖçºHé�e%qâ–“@Ûu8ýlZ9vçTT ÒqÄ#ž>}ÊÿþgÿAâûV@0YžÍ¨ËÓiÚªE)‹’÷<çÈ#;øÊê¶;¦Sú¾o½<~p—•e‰è•TB¨ãŽ¢m[~ý×o¬œx8"Œ#ö»”¦Õì“„çÏŸ“¤9»d�ưÙlXo7֠ص„¡Ï³ÑSš¶#/[Þ^ßÚl%?Y‘Ói(LEžm©—qõ²%B iÑ!¤… FáÈúc:ŸÅbFS[^^TÔU�‹%tÚÚAr8,‹ºêý2ÎQ}vèhmR—Û®ãR6¶«8¨5ï¹pmÛ"�÷ž õð£ë‰×�w@‘¼·û©Ã(¢qD†yuýÿkm}K¾ïÓ5-mÝ€oAŽ‡Ø†ƒ·HAÝØÏtسüÇ £”ò¸ËúaQ|Ì ;ì–‚)%_}õ_|ñ=yÆb±àäì”hh‘Oªk­¤¶ Ô‡®£p`ìÈ0Mr¤Ó¢4# C|?d¿M Ç“\½zÍ‹OÌŸÿ›‰’¢Ì�Òe¿Ë°£5†Õê0œ,ϘM§\\œÑ¶Öh»% bÎN–LF#îVköû=I’`¤´ãZCÏF´JX‰ùÔuIÛÕ¥ýõº,ˆ‡óùåÒ$#Ý»ìw‰5Cã „ƒð\Œ–Ði:4J*†Ã!‚’(ññÇÏXoßq}û–(òiº”"ÛXp­£9;™`º~çYU,§¸®¢i+Ú®¦¬ì¤¦¬777,gs+ŠŠ\:-P2c6[ðëßþ޲êð½cû,g»OX.fSiùàão,@nïè ¡d�H’[¼ Äuý£|õÐ:ÌX]×q{{Û߯\__Û¥fàùþ`ÀÏþ÷Ï—½´S8p÷pà ðp=ÅébI„# —v¹úôã þò¯þŠû»;\O¡\׎š?²Æ´áh‚ãlw¯^_Sw­ ¾25nà“f]'H³×QÔMÇýÃÝ6œôû�®3ˆ¶Ck�®m8—r~òÓs·ºÅ<>~ñ(Éýê–¶ªyñâëU‹=KËX…HÓYK«+´´©•–èoÐNUg¶‡…óá <ü¿çy,—–.k àæx°®×k|ßçW¿ú• Üò}f³G‡¼ãJ„Ô<¹<Ã è ¤ù÷HåÚ!¬êÈÓ ® £Ñ˜ù8f>¶Š¬*/H’Úx4ºÆ÷âþ··µo¾ù†á0f<ŠG*²$ëãÜ=êÆPT¶KÖFp "<$0 {²>î>¬æý¬=ìƒxÓ}¸ÑIýëñá\UÕQÉ&ôûbòXqP öO�wH‡÷·çyGs îÕy!‘Éf Ò€�[7ˆGRm»{‘Ç"v¸€ ÒcuÜ{ üû‘\×uhóž~ø¹Çñê¡Tq‡¯ñõ×_óîÝ;–77œœ�2]Ì £¨ßÙ×Åé)âáÇãBÞCYV´u‹3t¨Ëêø:ÝÝÞÇÖvQ8>w÷k:£Ð�a0ñ=CžÈ™c%̳ ÿÙþA¿'¶£úõzÅGÏ.ùë_ý†²Ê�RñëßüI²g0ˆ™L,í9é»åºi‘JS7 º©‰}�ª²&É¢j0B¢;KßïºÖ*º\…Àª˲¥Ó m£é:ÃnŸQ–5^è1›ÄL1Žç‘¦{@÷æhIÛTxŽƒ’0ŸMøüÓχ„�Çæá�d»Ç‘Šáp„ e¦±já¢,Ñ]cé&Ê>›Úâ>ïa³E Ãx4ät1‡NSËÅ”º5dYASw¸Ê ˜š>žÆÍÛ·o˜Ï\>9¥¨r@3 Øl+”Ô4eIÛ4¸ÊÃé½\FwhGázÖïåôïy)ì³UW-«Ü"…./žâ{q<¤Õ'ËsÒä—ÔM‡Ü­6˜ûõƒÿßèð¦;ÜíÃQóüÙ�ÛÛÛã cgé/^¼àÝÍ5U]r~~Æv»Åó\ªªäæ>çÅ'ŸáùŠO>ùÝ Ê¦æùÅüÈáùÅ)E]ζՀÀuB4††7piºšÑxLQ•Œ&c²$GÓó™m'h‹†í>£3šªî0H¶»‚d¿f¹œ£ÛŠÉxÈ|y†6 £Éé¸ìÓŒ²¨ñ£�ùìé¸l7{òí†ádÈâdztZeq|Èonnp¤¢k é>CI‰+}ŒTH7Æ¦ÇæGƒiUUGóãër /sÝ^[_;#×u¹8B–e cŠüý¯UUÅÕÕÕq�½Ûízä?”¥õÙ¤Ò ÚšÁxÁ§/>f¿Ëxó¨‰>µëŠé4f6±q¤@hC]ûl6[K³6ºS G1R:äeCšÞq}Ýrq¾¤�ÏÈ“Œ“EÌ0#݈:­p¶­?Èšû1’çY¯JVäGßÖc%\×uÔ�Ý¥ˆþý(¥D>ên\×µÄù>9õØõð¾£8•Ç]Äûß9î”]È¡Ðv@²Áã_“ý×ÚÐÉ®÷–Ù.OlÚ¬¶´ëÃ×:(<�j'åûý�©ª£8áð|ˆÊÑÇbqì û¯†! UÕp}}ÍõÍ;âÑ�Ù|Îl¹`0ZáJáiªÚ²â:ËÛsZC‘WxÊÅ÷ò¼ #årwsËÇB«?ÿùÁÿü¿ü¯´�¤­Z§¬Vx�õUýÃøÇ|úé îïn@H+ Ä$I‚ç9$»-÷ïý†ãÿ×ÿùgÜ=¬xñâ9Êë˜-æ|ñÕw\½}G’ÖT�F¹!hƒ£<ÂhÒÁó¬JË^z3³rð”ƒr[´®QÊú…t¨šš¼h(ꆺѪ¶³#cc}.­°„|sðs9 Z� ô˜Í&Ìf3ê¶;†"¾§�iI4ÐêŽÕú%!|_EeSs÷ݫՊ$ϸ¼xÂéùgçKüÀ©Xžœ±MR^~ûš»ýÆ5xn„’๮#Ùoט©¥RÜÝßà Ü­[ÚªÄW’A0ÀhAV”yŽÓјº(q]åÛg¡j uQP— º®Yݯ™Ï–á �õ˜YÑ–GÓ6die/ëÊAÈ¿±¬ü§ c:Œ¶x�¶u F¬×ïØn÷ŒFʲ´ÆÍÖÊñæ³)Óé_9|óÍ7´ýºÝnñ|);Û¹H�?£kI’°œÏh»ÚVa:š¶é�}UÕP »,¥45÷›µõ ….›ÍÆ’WûÃÝÆ]×´�Áñ~±Zo©CùTMC^48nHÕuHåDI²ÅõCZ Žç»¾U~ ¨êšÍnKÙ”ÌÏç¬V7l·[NOOqüáq9ZœÒT]Û’µEç …:Žœ¶{;ç=ø§â8¶ž ×#Š¢cwT×uo�Ì™ÏmÛ;�NÙŠÍñ°:¼É)—UUñôéS~÷»ßÑ4 »ÝŽ�?þ˜ûû{‹…=¨„Àõº©É’û½ÍUR­5‡FÑÏéPÒ.×KßÅ‚AYYö›”ÝvÍÃæ{ EÈx4% G<¬ïÑZ“å-ZoÙow„Á„ÑÐ'ÀóHõ¾¨<m~¼%‡âsø¯e­|×£ë•av$eŽ4mÓ»²�c$ø‘’íöɦúÃþ‡â=Ѱ:ÖýßZЫ¶�mJ)””¶“íÇ=³Ñتš*/¥´T:8&LvGä¡�vCï#½ß�×ìïùp‡u¸e>&v x†Ç‘š¥>ģ <Ç'ô=Šªd¿Ù²ÛíX­V '–VŒ‡Ö m‰Èš¦n¨ëÇ 0F†1žò¨LÉ0ŠÉÓŒ¶Õ„AÌWß~ Fây!eR€t©[ãu¹Åq\NO.h˜Ï–Tua1EuÞ_<íâ_ü‹?!ˆb~ñ‹_pó/ÿ%B�t’4¥ÕöÓj�ãú¶°+‰®k¤ãö ¥>eYÓiÊ-*墔DJMÙ$LŸ»ÞîÑ”ãáôB¤‡õ†¢RLf>Aòö»wŒÇc5Cw5ž´q-ZKRJöû=u]Çr5ßP”šízÃv»e0™‚$ùŽ$ɉÁdÒÖ-ež³/Kê0@*xrù”ÁpD«¢pH<˜‚‘Œ'sVë5QS5š²È¨«-#é:… pd‹ãÈãa©‹ü �ø?è|Þ3ݤŒÇcÊ2½:š(Š�F<ÜÚ²ÛÏü�¸Žõ*=&,h£?>¼ßýèÆkBÊþ6o»#!£L�16*Àq¼¾+4$‰u¦û~À0±ß&A@ ã^ž±ï“AËÆ†OFQÄÉ|ÁÅųٌÀ÷ � ˆÈëö(E?ÿ ¡xûöaòí·ßòÅoÇÝýÎva×g¿ÝqrqNÝf\\\ð—¿ük”0üäÇŸ1…£yw³îåÊ·ìÓÿìŸýSöiÆ_ü†ª.¨Ûж¬pü€ÓÓSZá£ßÜQ·€‘(ױ甴m‡��îýZRbŒ½˜¸ÊÁô2ü󦵶Ïc^’e%mÂhSb”d¢l°äµ¸éSJõqÏXUŽ(W±ßo‰‡c\/"ŠNNNhZCÝÚïÑz½%-S@3Oð�ãÂ( ë:~ü³ŸrËÉÉ ƒÁ¨7bò,!IlDË|yÎÉrNDÄÑ„ª†ÛÛ{ªª¡i 6¬³ª÷t]Î|Øî÷*@RiÚ6'Ù·ä™D9Sò²âõÕÃÉÐ>€®ËhdÓC_¿~�1†·o®l®…âx?ýƒŸáúe�²Kö„ÞÀº÷ˆ£!ÛÝÚ¶Ìt4Ò¡5@£IS›Óã:—OŸÐt o¯®999a2™±˜.ìH¢­Ù¥;aSýçr9=]²˜O(ºŽ²Ì­@¹ köiNº}àÞSÐ4<}ò„ñxH’Há1ŒBñ�º«éZÃÉrNUæ¼}{EÓ–ãÑ”³Ó ¢0D›MKÛ´� ëmÛ"�¤ÃPõB€CgÐ+±²,#ï¥òVݦ�0σÚíq9xs´°‡O྇uFuÀq„õ8pî j; àÿ5úz<ºs¥%xhJÈc‡ã‡öVïyAöŽñü}\„#Ž_ÿñ‡UqÛѲî€ÙÃèðq7÷Ø|{LÙMU3™L(˲?Tìí?í3ê‡ÆÒtÏ»w·¤IÂlº`:3™L ÇHì_JëM ‚€¼*ùþê-¿øŒ÷çÁíÝ–}Rðöú–ÑpF™ìQžÇf}ËÅxÈßú[Èz÷ÀçŸ~ŠP’íf�î–‹3ò¼¤m5óù)_~õ57÷w¤iÊgŸÎï¾ýWHÏåòéS:põnM]Y5W‡dm…K‹4 ¾£QŒP×-¨«×UxZÑ´ •�çÚn ÌjÆÓ1yÝ�ìp}¯ìd\½½e½ÞrùôcÐå*ºº¥Ã�dZ·ÄqÄÉÉ-eQÑ5“ás&¸½]ñýõ"? mZ‚ d¹\Ò4]S¢… /*îWkšN3[,­ )/™Í¦äyFà;Lgc.Ÿœ¢;É~ŸàùCò¬Sõ!¡K®Þ¾" â( M×x¾àù³<»¼@¶šª,yxxà~µ&ÏK»¯nm2µãØtÖt»çîa�î¬8Éuí¾h<µö�ÕvË&+X6eÕqqqÆÃzËÛw7tÚà:6Gê?õão”aï³=Zw­¹¹½¢¨lfLÛÙ ¯·oßbèH²”Õ÷7·m3,öû×·2H©M§)«÷›¾ýšÍnÇõÝ-¿úÝïx}w˯¾ù†¿üúkþêÛo˜\Åw}þèïüqìâ{m ¢�"Mö8ž‹‚¦±_à…4uK²ÝmÛ�¡�WÔMKQXeWÛttÚ¢cdïÓRÊAcG¥`±P® ¤Í¸RÑ6IÝÚtGuac ÐiKƒRZX§´º£i[Œ°amaãÞÓï£Þ¤¶n@Ú¦e6± »w··´½ÿªÈrÂ0¤¬ŒÖ½œÜ9ƳUU[Q�rúŽCGcçéMï=‚^¶.ѺCë0G©ÿQ° íîC)ÇzÚ\—®µŒ8­ ­¶^·Àð\­�•ò¶²g‘YÁ»ëwÜßÝÛñLàºßsð#¡oooqƒÿþW_òòû;ÊV¡ñmÌv] ­sžœÏøä“ç|ôü ÿäÿ1Ož\Ú Ÿ±—Ðd»g»Kð‚�O>ý”?ÿwA–çÔ¦åêÆ’ÁuSà8.ñ`ÂýÞõ&å§?þ ?ûìSšd�×äÌ#Åõ÷þ6‘ï�—%«}†?YP4¡;Gày>R*æó%q»Ëyìï9Fu+õÁXN?úGà¨a>üó–ÔÐú½¼Þ‘ÊÒ2ªÊŽêÚÎŽ­Z}ìX¤”6—§Wù¾OUWÇrèÆÀÂXí»üCßãÿÚ×Âù€g‹Ïû½–6Ö?¢Í{$Ò‘H® AŸ #ŒÍkÒ}‘Â@Y¼üö[ꪤíü0`yrʯ~û[šNòÿᯩI–74­éeÜPsz:á§?ûŒÝnÇÍí,_ IDAT5ﮯi›†8Œ1ZàI‡óós„Fðⳟ1�NÉ’ ¯îMæUƒp]”çóÍ÷¯hÛ–wWo)§SD'(³åEܯpÞËL÷I†#R8D¡>Bía"záD�ãùhÝbt‡ \nï×Ĺ]κÊz5ʼdý°Ç |kü”Um÷PRÙÓÍÍ]×1Nˆ¢ºë×zƒaEÖýÝ™žp¬Y­×”UC�ˆÃÛ$¥®+Œ€¼°ªA¨;ètÃÕõ5Ea³hÆ“!q`Œ¦®;ŠjÏ v‘Òæ³WUEÕ68Že Íçóãá³Ùl¸½½=’—s/eµZ1ˆ†ý®§å³Ï>ýºæä윲íøúÛ—(!ѲGµ{ãÖªºÅM’–øž´é•U†ïû Öo2[L‰Âgggx¡Çz·Å‹$F*’¬ÀÁàyx¡�_î¬J¨ìÍœ‡ƒ¿Õ-]g¨û 9M)Üé£Tý°ñ}Õïx…¦ë Æeó¸XìÇû–ÇÈ�ÇÄcÁôòïƒÌ[ˆ#›îð{'“ '‹%³É”ÐŽqó»>þY(ÿƒ¿ç1n¼7䪲Çý@\ ”B8vßðáLJYc„uÇ#‘òQ\·Ç×ãðyXÀpÔÃkqP^À¨ûý´�ˆØì7\½}ËóO6ÐA^%iøè£'lÖ Ešã \V÷ Yš1ž18|ýõ×\œœóäÉ„dIŠ¡ãÕ«WTMÃb± n þ§ÿñàìéù%µÓ6ú¡3‚õzÍÍí†ûû[nê†äaÅ‹ó9±LGs‹" x(¯�ù)a6ð°¾%rÅ{Nš<·{ÔñhÊÍÍ£Ùœ4)q£]’}Ž¿�&”EK×Ù£ºUR�í3vYÎÙòÄÆ¡4†»»;::æó)uÛðâÿéxì÷{Ë4†g——¥¸ººb·Þж5®0vÏ„8ü0Dz!ëÍ–Ýv‡çúý~¸cßÚ]êr¹$IòmBÞG¨|÷ýâ8&ðîW{4v4[u„}7]‡1)“‰Uëξ¢ð( ;ê¬*½¢ú÷ˆ0ö¹9=9Ç÷]¾üêkéQU†Eþ}ü�ÐòdÎéòĆ=­n©Û Ï÷8é=:‡Cïüüüx3�Ç aµZ‘enOq®ZûæÏ²’õÆ0Œ™Ol×Þ]_“$ mÓ�gû$uÙ²Û§ÔugÑ!Øöõ]ŒBKH¸¸¸`0Å "Ù'|ÿêUU†¦æt¹`¿Û[EŒ´€Æ0PÒ±dh©ÃßµÑÉxFYU<¬6TU‰ë¹ŒÇ#kö’Š(Š ¼€¶ið<ŸÁ`ÄÝýÛ�5Ÿ e‘EŽëØÂÓ5t]C’ç$YN„QŒ‘м*ÉË›»eÈ’”²*q”ƒ«\‹ÊךÝvGžEF<ˆ™LGœœ. Ã%†GHŒéúÎcãÄG£ƒx@–æHå2_œ0_̹|òeYsw{‡FXg¾Ö;ÑvèNÓÔQ¢M‡£$U]swCQH%©›†³Ó3ÃãÉ„Á0¢mjF“RØ™už6ŒÏØå´ã¸4uÓÿ{Š£¿É†¾X|’Ö6W)‰çúÇÝÌ!¶"Š¢£ÊíPpx$ã~“ yì?w;‡®ãqá9쇔²i¡‡ŽEJ‰ìåÕFÛŽ- B3ËõŠü€8Ž-v%²ïY£9vgC]×´�”n=ô^~(@¶Ãë>ø» ñáïÑÚ|ÐÙX…Þ{OÙú›{¯{¥Ãéð=9¢wZk®š†ªnøì³ñoÿâ?p·fó°±X›ñ˜O_|Äl6d2 yþ죭-âää„ñp„@VÒÜ4ËÅŒùrÎ�ò9?ýÙ�Ùí·|ñÕüèGŸ‘$;¾ÿþ;..ÏG”�á«o¾å~µÁuU‘±ß®ˆ—ùtÄÉÉ’ÎÀ›w·Ü¬·´Ø‹¦Ò�/q=E§Â0àêê ¯ß\!¥ÃõíIׂ’>Æ(Œ‘HãPU%ž#@t¦êu­îXw}¡·Ñw·wì“=y–qyyÁ³çO™Ž†œ_\ …!Ž"¦³)Ÿ|ò‚‹óK~ùË_òòÛ¯­8Bwýu„ïV½Ù{÷šÖòâ\×GEÓ´ºÖ°Ý칿 ,–§h#yýæšw7w8Êa6[ ¤¢î EYÑ´FØtë²²IÎAõï�ël·;ʲ¡(J’4a›¦$û=yž“å9žgQigç§DqÄÕÕk6k”‚óÓ‹ßo·ÛoyxX!Ú©¬Z£,K&£a_,RV÷w\\>é±ÿ9çç\\^â¸.Y^R”J9„QŒ„TUÍõÛw6Dª¨Ø­V6¯>ÙlÖ¬VÖçƒ51�E›–ÙlÂh<& #<ßg02�L{’Æó|Ú¦åúíõQ¢l´9ºŽÃÕÕ5UÕØ¨�ÚÆ»Ê>ÜŽr¨«š,Ëp”B·š»»;ª¼"D$É„@wšª¬p”ƒ�Nj³�v»=Y–Ó´öàŒ£®çQä9Óùˆºi¨Ú?Œ‰G#D¿ÓZ„n/ï:�Ï pß`„�ü„æüòœårÁl6ŘŽ( hšŠÀu-!ùä”®kÈÒa òCfÓû4ëiÄö–“å%¿üë_Sö0�U�Ñ›*Ûº¥*kV·w<¬(«C‡¸œ�ŸòÑógÌ—s¤ăFhKÅu]Œ€‡‡uϳ¯o‘÷òcmq6®ëà¶“q…ã:ýBT ”Äq\×c<}@¼";>8x�Šªê‹ÕûÛ¿¡¤%\(ùAGsøø¡ùôðç~èêºÎ~.a¡¨¦ë Æ ¤äâü‚ùl†#lTµ2à*‡a<`4Zªãà(e•t½ñµk[º^ gŒé%ü}ôD§ûB¬û‚cGÂö‡ê;ûs6ïÇ~ÿœ~G&¥sÜût]{ô =.¬¼V�F“ÃAx…V…9�Έ¢˜0 q\Ÿÿi�ˆ®OYYS—x®àÇŸ?ççÿùßf6óåWßQ×5?úì3ž\^²~X!¥`8òÝ«—8Ž`½yàå÷ßPÖA°Oö¼üî%Ÿ}ö© :t<¶;~óۯȶ;¤ë`ÚÝü“?þ‡Œ†Ö$½MvÜmw44Ú’·‡±mcÇ�Ú0ûnꎦ58®O×Áp8¥¬jвÁwÃþÀW Ç’Rв¢© A–”ì·a4 ©[„P¸®Çtg½W—imÔÞÚ ºë�•bû®Ç|:c:‹�0ﺮYÎÄq|„­¶mKY×Gcòã¯ù¸è™V£¥>Æ#¼ÿøÐmþ'd ˆóA—wàÆýP=w >6ÁF�•aF¨žö x~È|¾à_ÿ›Kàùó»]ŠïÚÀ´¶Í <ûÈÞüÑ ÿý?ÿçäIJ]Õ, e•{}ô„élÂw¯^òêêñ`ÀóçÏùóûçœ��±ÛíxryŽìÕ�óù”¦Õ8J0ŠC>:=áì쌮Ê-pصӘN…tÛ­5y’¢Ð,'§ýÙÑ’•BzmÛPV5ƒÁľnm¾¡) OvTtx^@ÝB×€¢Ì .eihÁ“'O�Bs}}m -qÌùòÄvÇaLÇÜÜßá®r~~ÁÝý å¸ér¿Úð°ÞõoFÍýCÊjcý‡Êñë³l>§Qg$y‰¥Èû„ñˆÆʬâÝý†®Ó ¤! =†£�(öQŽA8 ”õ œ‰%éZAY—´º£h+Ïvã®¶¬Ç}’Q”5ß|÷’ûû{>ùô§§§xž‹®øOúø; ª.éšG@š$Ü­î�Æ())‹‚ÉxJÛµTUM²ß#¤Mð¼¹½ÇòÐ<”ç2O™Í Ck‚Ün ”äéé‚}üŒ�.ψ|—Ñ Æ‘6áôÙ³��§4uÃÉÉžç DËp£�UìD¡ « †¸®�&Œ#&ã)Mk} ®£(ò”x0 jknïï(Ê’ª,)‹”¶©hš´Æs]†Ãˆå|Æb¹@Û ()xõê;†“ ZCFG!Âal7šLq=�<ÏyxX#‡'O.™N'´MMU×\>¹@y.A#—¬¨Øíö4­Uë„•§÷ +ßQŽ‹ëØƒc³µ‘ ®ë±Ûo0®®®l¨n¬L6Š�ª¢$v>+…Å*um –''öÖD‰<¬6¤i ±7pGÚñßaŸÐô¾›ª¶@Öé|Ä`#¤Äu-UÙ iZëèwsK’fh#ƒ€¶W¾9RÙH ʵ7ø¶k9ÀÕ´éèzFÙA†,�TuIUW4}·p0‰–õ¢ÙšÃ¢àƒè¡÷ã¶îwF�Mž‡CZŽ•èKz)�18BG£áeÀ÷<š²Â‘ÊfÿôéªFkÇ’/œ^8ÃÁÏu�ã½C÷£¤B yüû ,ûìо'›ÓÿŽãx­W¾=B:µm‹ç¹Çîç‡û­C×�^ÇC!ô<�0�1Ô£‘¥·Ÿž^ðëß~Ašå¤iŠMSQä Y²f89?�ã{ãÑ�ªÒÜÝÞ xžk“†�¥ üéŸý)¿üÕ¯øü'Ÿó¯þõ¿B)Åd:áéGOysu…ã¸d}ìsÓAšäEŽBßc2Šñ” ®Kòª@HI’—ä• )…1®ãrzz‰@±Ý¦¼½¾!Ï«ž(r „ÛïƒÑa豘ψ㜶§cÛ�6ƒ%Ÿdi�ç…ÄáG)Ê¢$ð=V+Ö›‚0`±˜“¥)uÝ�¤ »4e›DÃW×7üò×_�W-H¤ËvŸò°Ù!”8ÜÜ®hƒÖ [–Y–“$)UÓ±OR¢xÀz³ça½#IsV;¶ÛÏ �§½ìºCk�J ²ÏDæøÜ&ûŒá`Ê›×ïHöiZÒ¶6U¶é4�6k³Ó$iJ¨ë?ð99=Åuí.=Ûg¿ß®nJÒdKU”ÔMɳ�žñégŸ²Ùn¹¾¾æââ’À¨k;;~õú ›Í†N÷`Äªì½ öaøþÛoØ­p�áùÙ)O–s–“!Ë‹ÙOÙYÿÝí-—— ·w+>~þ1®#y{ý ­­<±k[ÂÀÒ„Ã0´ÆÄ²B I<‚1 Gâ8"I÷¡OÕÖì÷;„0(ipIº„�Çt:d20Œc„´fÊÝfÃp4`9›rs{KFt&“ ŽãXª â£Ñèøs�6,— ¢(äêê-÷÷÷L§#†££ñå¸ÜÞÞr}{K×Lm×YF“ç!Œ!Í2Š”,Ëp\§/^6^¼njêªD¹ŠÐ÷hšöãöæGyDÑÀJ�›Êr¸¤¤kZ¶�ÆÄqL]Y?½;½}Ô©8ŽCÛC@C:1 A| Bø��Õ”z_T�Ö‡ñaIÿxÏòÁŸ÷l§f „ìeÙ.£xÀd4Æw]"? Ùí{Þ-� ‹BŠ^UiÇk®çózºÞ(Û=XèNQBŽëÿΰìí~ì¿ëýhí13î@¬ö{\líèÛùÀOtì{ܑ뺌†cª¦µQ)¾{ùi–“)u]2ŠFȳ“JÀÕ›7”EŽPÃALèúTE�ç8ă�û»{¾øò7 'C¾yùÏ÷Ø¥ /¿ÿžª±$ÙlwtZàG1�ë(NN–LÇc|G0ˆCš"/Ò¡¬»OÍs<åú»MŠŽ-:MKÛ‚Tмlˆ‡C|ß'ËR\Wâ8‚ÉxÈßý»Èù“¶Éš´H ¼?-å½(Iv9ñ`Èv·Ãs=ªºb¹œ„>óù ×Sl6Û^aÖ Çœœ?¡ÕšÍ>çëo¾£h:†£ ÛõžF £ Mk=~m'iµ!ìC‹¢ÂQ½¡3HÕ±ÄÌ\Q¥}ž•½Øînïé„¢n{Ö˜Ž¼HÙí7$û�åz ;~Ë’’ùì„¿úËßb´"KK” ¼€¶é™F`ZC–¥<ÿè9ñ æÅÇ/Ðl6[|/¤Ì‹ß¯I“ñ�åb�ç¹L&S¢>nûþ~ÅG}pŒ‚öü€ßýîwø¾GGaÄ»wïxûöŠõú�.Ïyvy�«¾Ë$ôh²²«Èö[†q@QdÜÜÞðɧŸZ“”Ö,sÞÝ\³ZÝàû.ÉvgÓ㘳³3¦Ó)Mi# ÎÎÎx{õ�¦mîïïHö;æó^ä³<]0�Œ-~|6e6†ÖTjt‹ë ¢(@`B£:&Ó ÃÑ”x`wN»í–ýnOUVŒFcV«ëõš4M9;;åÇ?úŒf1Ÿ2D,s²"c½Ùp{wß«¢T�Ÿ¡ß‰ØEqx*Kö6ƒEŒÑ¬î�Gìv;ò<'ŒÆ“ZëÞXk žm]Yf\<`µZñâã�Iö m[Û¨‹™…P¦YFÇnØ4¬îï�Ò¦Û&û=“ш¦©ÆCkœ4-Q3šŒHÒŒ,Û"»g£ãa½¦jJ$‚ÕýWoÞ²Ùìp‹u©«4¶ +]�N§¤Éž( ©j+/¯ªÊ²·¦Oi‹�¼ßÿH)1BãáµÖ¸¾‡áýHéxxbú¬žöhâ<,ߢƒÃa}0„æ�ˆ ‡îÏ |Š¢è™-ƒ(¢«Fñ�ÈŽXÇqŽ�P]ÚÛµ6Çqñ}?ðqEÛ4Te‰0 �Gøž•ÖÝÑ«N½Ô׎ɚ£øà=¸ÔÆ_8Êé “±*Fña¤Äås0ÐBëÝÀ|>?Š8ž8Ži{îdÙÇ[7H%iÛšÙ|Ìb1!MÖL&èÏW,Næ„AD–ä$»„À X­ˆÃ�ý^ ñ\�“Ó%³Ù”}ºÇuêÆ Mº:-ñˆ¢j8¿üˆ/¾~IY·4Z`ph¥ƒFÒ�rtoj÷}›ÁÔ4 Ñ`HU7ø¡OÓ¶Ç”ÝdgU‡Iš÷1‰n ÑpL™f(Ï¡ÓR Š"!}´1Ö€ºOɲ‚ŸýÁßâOþäÃ÷cŠ¢!bʲCK‰�¦´êâ:Í ãé>Ás=Æ£IÏeô(ŠÓu¿_Ú$[<Ç¥ik<×c³ßáù!———Çùãz»!ˬ“þ %<0²æ³)³ÅŒóó ÎÎNø¯þs>º<£LöøB3‹C"Ïa4ˆ¦c0Qµ·k¶Éžï_¿îÕWoÞ TÏû2†2/�RòÉ‹øŽ{œa¢�½²^¯I³=¾ï!=‰Ö-RØ0:WBÛTè®Æ‘‰A)zªpc#¥Ûæø0Gñˆ¦éØm·|ÿÝw´uÃl>çâ⥣Ñèˆ)1mƒç:ÄaHUeŒ†1¿ùâ·¬ÖVÎ=ž0ÄèVSäm¿ÛPB0�™Ž-�+ŽCFÃ!®ëÇ!Ei÷J)„²#·étjSOïWDQ„+âAÚŠò´`0؜ϥ, NOO)Ê¿O�u�ËËKÎÏÏyþÑ3ÆÃ“ñ„ývkÃÿ‡´÷“ì¬îü?÷½¹rì8yF£È( !’@ä cX�ØÆ `[`Xƒm°ý#ÌX Âo�ÑÊdˆ° Œ� 3Ó3=¡cåº9íï­šayÙÇ÷yZ£ž;]]÷VÕ{ÞsÎ÷|¾IŒU*ÈAÎ$ÅõÒXî�Ü8…Át7ßôÙXà¹rçmÛLCEÕ¤ï}EìÝ·�0P5•Àó§}‡iã;—'g(HoÙΙ”‘Ò<ðLJ�£m¶öx&ó6Ѝ™ßÙ úœd [KT[›ñ(rGUU4¤È@C–ßê¥ FîÐ;!H›¦™÷Òdà¢�4•eŽ4I¦½ U•ý.ßóÑ5œÊe -Úô‘kçb¡©([nB9õ§�%³,ËHâS€Ä­°ÓI©i«òmbÝ= dš¢FQî× 2ˆ‚€r«�¡ëˆLö5Â8! # â,w9Õ4t¡LE¾ï£åì?EQ04 ‘sþäÀŸÀ4M›Îáq„¸9„VÊÎ'™ž@U•œ�'r•×)9¹PÔÓz^[Kx§—îÄi™ãÖ§¨‚n·ÇüÂ6Š…2®2K’G¹,ƒàUW]E–Å("“Ž¢Bå§wþ„,J¹ì²ËYh·ðC<¢Õ¨3yÇŸÝH{f†þö‹Ðt�«k9…:¢Xª’8.½ÉÆ�r¹ŒPAQäõz*Õ¡iFŠJ”$ŒÇñ(•JjF©`KÕg’`Y6q$Ç &¯ƒ3öˆãÍЩTËìܹ“4õIR�R¹ˆméôÓÏuÉ6U´L¡R¶iÔ«$±‚ D‘O�E¥*®Ðh8þ˜z£J·7"I"tC£R+£¨‚r¥Bª6;šßPû IDAT]zý>)¦]`0�¦r§££«šj�)Z®fu!‰’EHàl­V¥ÝnS,ÙD~€eYlnôXZ:Ê ·I”‹6ZµÈÚÊ ¨ µZ‰Ý»w�¤åŠ�ë� z$¥ŒR±ÆÆz]³óÁhˆ3‰ˆšð*IRÒ$ÂÐTD>?T°-HRBÏe칡Q-ZZN;6ÅiB�¤„‰~Œ]P9yò‹‹Û‘ý9Ô•åØø‰´ëº’…Bš&$qDG ‡}*%‹B©Œ­ËíÀE­™FѦ\«QnTØU«Ò\ :Ýþˆj£D»ÕÌeÉ;·ïÀÒ�ܧ%œ~à àfÔèözŒ&Ëbms¡—ÉâD6°•�,�eŸC(4!ˆãdÚ AGDQ‚¦§8î�Ø�±4�í ‹„aÈÒáÜ8~œÅmÛ¨×ë †=ßeØïú¦6G«V¥^)Ó¬VÐU„†¥k„QLz�Äh†N³^–¢€4ÃsǨä¸x$”0 C,Ë¢V«¡ë:Žçá8ÎÔÚAŽã` *mÖêDQÂlkvj﫸P)W9zt‰ .¸ˆn·K±d¢E‚$‰PHÑ„ ^.bi*{v,’Æši°î ˆ6åý0 %³}Ù-• 1Û ÑhЬWÑu�FµM’d,=¸Ìêê:Š–­!2Øvà…Z³†ïIŸaÙò ©MdØú�\x&ÇCD'®¤BHN‰ ¶Î…axÚB;9&�`²èNþýÖß%Ç;åû$K¥"M‰¤X$‹RÐÒÓz'™Pªì£)ùcjª –“¹œ‰:Ͷm‚\q&„@Íwøk5 Ð �LI‰ÂS>@ò¹Ê@9)�ÉžŽÄîH‚C*ûB¹*nXx'×>)ËMþœ_Ûí6VÁ¡pûí·3ö#‚PVtCÁõÔe*µ&Q"4Û.R®—ØÆ9ß¡P­K‡ñ³Ÿÿœ œO¥QçÇ?¹“µõMÜ0bvq‘áê&CwÌf§�ãºè–‰0" –‰*òL9Q A¡PÈ=S C0vìB‘D͘™™Á2dQŠ’ðü„8J Ó”0 ði_°¥ÄxžŸÐjÎP,æMpÝdu}�( ß«3RŽ>Œ’%(JBº%¥Ýª“e);fé tCzk8®�’f,ÎÍÒh5å>•¿Ówr³?U!*ª¡Ñë9èº)�¢0 ‹��++knèËÒ\D”J¢P–Q굇�.ÑŽªµ:›ÝŽçR­Õˆ£ÓPG(’Xö%ªE›³öí“÷U�øøQN®¯‡ÒžXS4‚TEÁ@Ó,L£HäGl®o`Û6E«È¶ù9D"{(^èÑéuÙ¶¸@©TÂóÍr®\†Œœ±´êÎ]_ M#KnàãL¨šF–ÝÄ´t´DŠ<Ïà ‰H EÒÞDµ§Ï5£¼\¦m)1*[2•,¿�[óÖ{3‘]o Г¿3M“™ù‚  Pª±|ü®Óë(” lÛ>‡iÉŸs]—¢irÅWðèG=ŽåCËô{#Ìp$ý¼¢„‹‹†Ns¦Í}rèÈQ„f`(züä:#×'J2„¦£aàzYnh˜Ä>h ŠÐ¦DЉ)f”d{”„´ªuÔ â Âñ"�$ j¢à… º.ˆ³„$•ýÁµµ š�2¥B×á G´[uý!åJKSñ“˜$ðÐTh4J”Šš¡ãAàpbå8ºfâù!BÕˆÂ�B±Ì8à¸úsó4ÛmêåÛf9~b�±3`J²HóMR.�IŠ´·”\”Edø�‹ªeŒúY`è *)K#p€$@E[–‡£šHЄ‚eh¤–Eg û#TUeÛ¢�놬ot±¬"šf j‚4“6:šPȈ0 …4 óÍqˆ&t<ÈÒ‘¾ÌÖÃpJîÿ/ „Bo8Â2S %'0�¹ï�% :Œ¨V«˜–Îx<ƶMÒ4acm�jµLµZ¥ÑhÐn·i·›ÎØ÷y.Aä&)k›+Øz‘r¡D­\bqqžZ¥F„Ò=ÿÐ�‡(IC)ã=±ºBJ‚ç¹l¬®¡ª²$£«£X�%�|‘04I`ÖISA– ¢0Ťů3–¤iÓ4IpØ\ßÀÐT¢0ceå$gžy&Ã~—R©@½&ÊÕR‘‚iÐëõh4𨦅* |’0Â*”hÏ4i4š ‡C4SÃ'ÄOCtU (R–,2•4NP- Çq¦Ùža’íºŒú�ÇŽcÏ¯¬²gϞܟ¤Îf¯„]´¦µþãÇ�³ÿ~VO®ÈÌ2> ¼¤ ™aQ,dqÂ8ЍTŠK6�' ºq¤ Jªaéqìø²w¦ •F³†m ㈢R©pÎ9ççL¬µ5—j¹H©PÂÉ]be €‰Ý€®ë¨ºÊx,g±&Ôè‰j+Í…ßž$KOË|&‡aJ*Ç$@MTr[é[çbJKÐu�8¥ÄÚ¶)¨˜*È0TMÊYUù8q–; eú|D>gáûþ´Ô¦ª*I–NÉØ®ë"¢púÜ&ÏUUUzƒcבSòÕ*¶mËÞWHªBO³ÁÓe䧤ª’ï·U†½µä6ùÞÈû‚“ÇBP,B`KŠ%2EÅõƲäø„Iˆ Ķϥ\, W*¬®®³¾Òa4pر¸‹Š™Æ…²…ë{üügwÑ^˜#Ê2J¥­J�þÈa­ÓÇó#’L¥X*grÞÄ´ B? ò=T%E”M„Pû#ÂЗåÏ ÙΚ†PÉ’0‡è¦†­šX¨(*ĤtûŽ,ùe”%1¢U'‹eo®^�ñÐe¦µ@à:tÖ×è÷ä&K7 ÈRÆ£!†ecZš&@I»­æ,ªj’$ õzM�JH¹X–ÎöÅYÜÑ]C¶f  CÓI’ ß“d†®)’à’f1ª¦†ªšA DÌF²g÷Nšõ8İ7 Qk°mÛšíÝ ŽŸ8Á¡ƒY[9 È÷‚ehÏÌrèÁ#t;tÝÂ÷!]zUE`è¶©â»FA#ô}tJ¶M«]Ã0 ÛšŠDhšÁ¨óPtÔÿcZ\\d0ôÙì “”�NÓ.ÒétP5…ùùvïÞÉöm r�HÒ˜;þíÇ8ãQ¾3Ô°-²Ï‰RE7ñcŸ$ˆð’ '†$ÊøÒ¿ü+ªmrlõ8Â2@XE›Äó¨·šøŸ‚eS.W ý€Q: X,M?xd‚4…N§Ãá#K¬o®IUYÑBU567»šJ¥\¦X«`™ETE–„lC%KA×4ÍÈå¶1ªVß•op?�ÓØÂ$N2ÆÃB“¿¡ïãŒF2�éUfZmÚ3 ,CÃ2UZÍ*ƒAðر°ÀÜÌ,Žçã¸Rª¾zò$I’ÈRLâ{.[jÍ4 “�†abÛe£†m¦ÖçGâáÒëö9¦�@I¥ƒ£ãx,,,e†mÐÙ�sZÝî&Ãá º®¢)P« ƒ˜ ˆPUM¤¨B'L¤jÉõÆdY*û q†‚ì»%qBàǘFEèº�’Æøž‹¦ê¤‰Âx8Âu]¶ïØŽaŒ.¦aàŒ†²„¨é‹E9dšä.¼B==€™8ë”ænBÎþ+ )yÐàtXg𣅴\Ô°5¨œZ¤³Óìš)ÉÒž\ÜmÝ€4£X.È{lj[ i:~ êЦ’åFti’Lg–&|º*‘8qš—ÔBÙÛŠÒS�p2„êyÃaD %É$3tÀ&M€™Ío-·‘ËýOëël9ÿPÏ$ÈO2Äz½Nµ^Ã0l~úÓŸ²¶¶F¯ï TÛ¶ð<�Ù¹:çž{.£~�ååeÒ £Yk3;#çnî½û.vìØ�ç)t†}.ä¥,Ÿ8ÉÁÇ8çXï�± %²îˆZ£ÉɵMFN€nZhF�8II¤(Yˆ&b²$!=EÁ"’¬ IJ¡P ¨ët:LUîÜ¢]ÏPÒ »dPO˘…GŽž ×롪*£Á�Ð÷™k5 Ó1�­ú $)š*¨WË„IDµR$Œ2 Æ^@Ù*S©ص{;ÝΈ0Ê(Uj”ËUÒÈa¶eÒ(ëTKâÐG7¡U«0h7Xss „aŒÈßÏ›ë–�¦×€Ð)×`Ä¡�¦Á0rI³XJ«cƒêl“bÑÆ6 T 6åb…j©Šã¸lll�%!•r�j¹@œÊRŸ’ ÖÖ6(Uê8cŸñHS‚�)r3X­–iÖŠô:)ªš1èûè†B³^f×ÎÆî×H¥hnœþ @{wïaì8?»›,Ž(—œþ#è÷å¢!²Sr]W™ß¶€ åÁï‘Ñh48pþ…,ÌIV\©´iÆ=÷þ’£‡¢f Ë$Ž¥v� ½v¹D³R!JbœqÄÑ#')X6%£ÀúF�“+<øÀ»wïæ‰�I<&p=ÒDÖÓ×77øùÝ÷âG!FѦÞZ$ëlàR¡ ©årU:Czi£ã‘“óÅUšmY¦�*Œ|"ÇôäðÔ8 ± ›™¹YjµAà1;×d~f†V»Îl»Éæú}ߥZ­R-ssª�4M(ºJšÊEj4¡¨„|áE*vbE &»sÛ–0O7ð§ sEìÚµ‹ñpD¥RaÐïráùçS*˜ôºTkÚ­™’Ò]ßÀód£vs}ƒ=»v†!¡/à$ŒÐL%ƒ,•Á]°¾¶‰ëÊ]�¦K{‚4MñÆ^ñàÁû(—ufZT¡ú•b™¢U" mýÈG237Ë·¾õ¯ŒG#¶mÛÆ¶…y àT©¢dÆ#üȃ„ˆ¦Œ·4M)UФ0e¶Mü&‹çd†e²�NúoóÐrÓÖ�»–Nì°ó>Éd`WUr%SDÁ�´RY'…$©´×ò¥DH˜jš�RÖ H4OYZcLœ„'ÀÔµi‰NQ†Î˜~¿‡ï¤*覆Rò?èS©Ô¨×ëT*„®a,¢("ðC™5£¢ˆSrì0 Q³ ¹ÙšÜGU ò2gnÃ�D2iš†*d? Š3N®­ðÏ_ýª^ Þ0¹¤)iKÃ8EcsuƒÎúP.T©”donŒt”ÕKüÞ+—G_þ(vl߆eYô{]î½çß¹ý»ÿÊòñc\sÍcß¾3Ù¾}'¥Ryú^ýªW@’�.›†À×R„% 61 öïÛËõøZsÅ4 º½.÷Ý÷ î¾ç'¤qÌãû$vïÞK©TÆN;Æ·oû&û�÷aÛ&^èñ´§=‹›núÌi×þÞ¿~?o|Ãk§ßÏí:›^¿K–@½Z`ßîyNè!Y–�Dcâ8Æ´ Šåcw$Ç=…~¿O¦êÖü¯€ÄÃ�8s׿›MöïÜÆ¶Ù& s 4‘P-›TK6QäÑélàz¦m¡‚‘;âÅ/}1Í™6Õz‹R¥É/8Æ—¿öŽ]æØÑe¢$#S êó TçÙ}îùœ}Á¥Ìn;ƒ 2étú›Î éÔJÛØXséš3ÛÙ±óL,»ÄìÌÂÔæºX´§ÍØÍN�j}†(5A)ÑíG„‘A¡ØÄÐK”JU’8c0ä3Q^ò‰|×Åq,í*õû÷ŸÅ¶;±ì"ss²‡Ñh6™_œc÷ží´Ú5Š%‹ /<@˜ß—{ï½›Œ”z½ž’Išu¹b³²rŒÍÎý~Ïw(,Ú³3]Ã*)ÕjI‚…„™ÊfoÈF·#—¥"‡â—¿ü%+++=z„áp€ë:ø�ÃÂü —\|€v£D;ˆÌçÄòƒh¤8Ã!�z�f£NÁ²qÇc?"‰d gbã äÆ|…’´+¯UÛz�Œ”/Ø@·<qÁv.¿ü,.¸pÛæ¸£áx ADwu�Øq˜kÖ¨L"wÀ9gì£d™^èÅ2H)“NC–Q0ltEÃT Šf�R¡L½Ú T(K¥˜Yá_¾ýwî!ÊRºƒM„š¡i ³­&{çwÒ=¾AÐó(б¡fªš1t:ÔÚ3¸äP "EpÎ� xƳ¯!ŠA7l†—ápŒÈ¡’!"ÍzC„nB”’„ ^ŠRÄ0›|ásÿÈãóX^uÝ+i6›ÌÎÌðô§=��|ø£\|ñ#9¹¾ÁZ§C¹RcÐëã "/ Qmóúÿþ¾ô¥/M7!o|ã9÷¬}¼ì¥/âÃþç�wÅb‘={örã;þŒ«¯~sÛx×;ßDZåvíÜÅSžüt®¸ìÉ”Ëu/B&ºfqàÜóxõË_·?øÎ;÷\Š…»wïá�nøSqþìÛs6Ï~ös¹ýöð¸Ç=~š™ßpà ¸£.Þ¸‡­+œ}Övîœc¶Q f¦¼úwžÏwÿõhŠÂ³žùLÊå2»wíæ�׿™‹/|¯~ÕrtùO¼êI”Êe*• O~êS9|ô¯{ý©5<êŠGòÁþݯ\û$ãß·o7Üpš&ЄB»YA¤.Y8ââGœÁŽÅ•’Ͷ…y2Nœ\cä&=¾Awè£eÂHùÕ€ò0ÇÃf@­F“ñpÄÎE™b ]¡×ï0ÓžÇs{ìÛ·�ûï¿�ÍûÕµu¹û�YܶƒÇ]ñ÷ØÇ³wÏŠ› 8²t„/|á =¶Ìz·Ç£u9¯¼î•œ}ÎY†Á‘£Ëüó­_æ¦O}š#KË<þñ�å�ÿä­œ{ÎYèºÆÉ“+üì§ÿοøO‹r^ÂŽèúXÇqGaLš FN€K*µY¬»CiTF(Y†ªAœ ­ tÉ]3MM7 óY? i·ÛôG:†mQ¨9¿p€R¹@JC¼�;·søða¢$$º”ì�N%͘ŸŸgì¹$YÊúú¦T6é*žãbšÒ¢»ÙžÁ@Å Ià‡®ïãaŸí ó{4E1Q˜�¥åJ…3Ï< %N<‡$бLS7Hã€8 ‰¢ŒÐ\O*ߊEâL*­†ƒ•JeZ†*—Ëxž—+‚$Ý¡T*1Sosèð2š"0M•ê\•(viÍ”i5ÊDž‹U-b™Ú§QJFèºJà¹Ä^‚f¨ lß¾(Ë:Õ*ž (*£XöpHc4¡ƒ"åÓQȹŸ‡È‡·6ÛÙ’ÍLÄ Y&=p²4Å44!�u44Ô¼T§«:šP ‘}Ò”8ËPr�Šœ“:8Û¶eÖQ«I§Ö4EL-Ò!÷ÝQÀÐ „!Ëlª¡“F)e¥BÑ.% �ÍM9<=3‹eY„‘œ£R…8K "_öö\‡0ŽÐ,“(“*EÓ¶IÉ­×÷§4ð‰|{âÔDZ”lçÁHÉij&E/i"ÅÎhH’dPÌ04ÍÐ%±:Ë0 Ъ�0Lª�:a¸q”Q°¸£1+GOЪ5°,‹]»wRo6ñ‡$ Ù¹w/Q–qìÄIû¸+‰QøÑOî`f~ŽÛø#Î=ïA bº®£�I™¯*0U�4S™ MäpæµW?‹}{w³oß>–––سggœq«««|ík_ãÚk_H¦Àz·Gmm×õeUC/óÚ×¾Ïó¹îºëN+9*¹„ÿ¾ûîã /ä Ox?øÁ¸ãŽ;xá ¯åçwß…eÙ¼öµ¯åÖ[oEÁµ×^Ëó^ôó¹\tÑ¥\}õÕ”J%žþô§sÓM7É_“ÛWÜvÛmÓuððáÃìÝ»W¿æ0ä‡Å‚�ï¸D�ܬ•Šæú8JþÞûèG?:]k'È4Mª¥Îx$]Vc¹)üÍç½�b±Ä›Þô&²,ã+_ù �{ÜãN{išÒjµ8qâÏ}îsÙ¿?_üâ9tèµZ�Ë/½‚ οø?¼ö0ŒN{¬0ô± �V£Î™ûÎ䮟þoŽ/£ÑjÇÇ‹PB—™„Ü'Ia}c@ íUê;Kÿá½zèñ°¨P�*±={ö°sÇ–Ž.a CÆ#Ÿ4œwÞyø Î?À«^õ*n¹åÎ=÷\vïÞÍ—¿üe®ºê*î½÷^^ôÛ×òò—¿ìaÏÿø‡?œîú Ãà�ïy÷¯\Ãp8â_¿ý}6»]žùÔ'R-—ø·;îä¼çÝY:,3¥D"ГT'b<ß�¾4]Î^h† B`-â4aeí$~2°l9½>öY[_£`Z,n߯l{„Š›ˆ��$¡èqHºhªAŠƒþH*Ûr‹ˆJ©Œfè„~„*ËGŽR¯·Ñ4ƒz½‰®Ùt;CzÝfÇâ6‚(c4rp�†TJEÊEUUû+´Z-„ YzKTEöæç§=!Ä4¦ ¾©8È IDATÏL½Éå]„iê �.Ž7D©71t�Ѹ‡JŠP™.¾)A‘( ©Ì4M"–òÒ�ï¹tû=4ãÔÌ�¢ ÈN5ÇuÝD3¤E:[H§‡rª±.gYNeG“ƒto}ˆø@ˆœX}ZƤH¥¤"äÂŒ¢ dŠÈ{"yï+c2%&0ÌiPPs›…$wqÍ”\�…TËUüsªòÃßɼá�|ð¯ßËÍ7ßÌÝwßÍ·¿ým Ã൯}-¿é&þø†·ðþ÷¿Ÿç<ç9hšÆ?ôAnúì?P)Ñ …$ ¹ç?ãwÿàå|䃟øç�ûïæ¯þòt;}îøé/~•[hèÄiBìûš4Ûœ�[äàÁƒ,//cYï|ç;¹ýöÛi6›¼îu¯ã’‹.àª'?•o}ë[<å)Oá/x�|,Uåcû•z•ßú­ßzØkŸ˜a¾ûÝïf×®]|îoa41»k;«««¬®lÐét{)Šªá8Bƒ(V™¦]c4rôû’äðk›+}å+_á}ï{ùÈG¸çž{X=¹B¯Ó¡Y«“Æ1•b‰ÑhÄÅ]ÈGÞÿAþö¯þ† \ÄØõQT .üÑ�~Äo¹•×üÁõ|ë[ß ÛíòÀ …[n¹!·ÝvŸúÔ§yÒ“žÄ`0àãÿ8�Îæiç?ýé›O;ÁE�²3ÎS÷É‚ó‘�|„�;w²k×N–ßÇÙ{·sÕ®dff†Oßô|öSŸ"A£? èä×òñ cŸ8RÝS(¡›) ¡,‰ø.›Ý 6{ÒL–5úÃËÇ�±Ùí¡ª:ýјz£…nX¤â†cŸáÈÅqÊÕq’±±ÙUÃ÷CDŽ+ñ}?/kDdiL–Är-N¨×›4m Ý"Ë]X›í6íö BÑévôz#ú½1½îˆNoH¯?b8öq¼€n§Ï‘åe6»}zƒQŽáÈ@(x�Ï`0`ÏÞ}¼îú7óÇïx'gœ}.#G"�¼ñˆQ¯‹-i(ëó¿¸ûŽ/Ÿ`åøIb?UÅñúÃ1c×gìHöÝ`<$Nc¼0˜.¬žçÑïË nee…£ËËtº]ÆŽC”Ä$YJB&3EAAÅ4%ÙAnSÒ4–_Y"_ R!U;B€ª*†–í�"AŸ‚� ²œ—d)IvJú,3j‰°QÈûJ™¤_[–EÑ–›³,“.¡KKK¬¯¯K!‰"á°Õj•B¡ E ™œS™!¢(’ftùm³Ù”«Ê)wRß÷§Òr5÷2T ]ÓPÒŒÈ<_ª³„Ì:mÓ¢Ùl2??ÏL«…•Ú76ÖX][¡?èÅš&°,Ë2Ðt!g:”L*ó{:aÆmÉ„;räa$½ ´B�j©Œ&T\WÒ°—––¨TJ”ËeöîÝ;¥I¦�i9Ϻæ9Äi®={Ø{Æ>î»ÿ~Î:çlqàë›k¬¬¯àŒ†r`2•3{š)%ÓJ–BšÈ,H‰ùÂÿúg’$峟ý,‹‹‹|ýë_çMoz�}ìc9óÌ3!cê’lZôb‰×ÿá[9vì¯ýëyË[Þ£õ¨é=ø‹w½]bÚ�Ïþóüå_þ%wÜqš¦ÉÏK¢ðÜßzõf“_þò—üã¾ÀG>òw¬­®bj:¶iÐïvXYY&I܇}œjµÊÌL›‹/»8ÿͧԞã±Ãý÷ßÏ}÷ÝÇØuH²”•µU¶mßÁúú: )5'OžäÕ¯~5£Ñˆn¸�•µ ²,ãºë®cyy™ßÿýßçCúÅb‘7¼á œ¹w?'Oœ<íÚ'å7€·þÑ›¸ùsÿ?ßûÑüã­_æŒýg°oÏ.êµ ‡"N�¸ðÎ<ë\‚Hº#{A‚ïGÅ�´îL T !~= ü'Э·ÞJ2Í=rÓÔP”Œ™Ö gžyã‘Og}ƒëÿðu¼<÷úøèß”ß{ý§\®Óévù‡›ÿ‘Û¾óo¼ì%¿Í5Ͼ�õݽ{÷òÍo~€íÛ·#„டßÍÅ_Ì7¿ùM~üãsÆgLÏ|íëß8íü5W_Íý¿øÅtÝzÜxã�\rÉ%|õ«_åú믧ÑhðèG?šcÇŽñ©O}Ч=íi\õ¤'qËÿú2Y"05 $‰BGxqšŠ"Ò8$FÚ‹Qnvµ¹!™zmºÈ¸®K«Õb}u T ×÷©W«¡²¹¹‰$d ”Ë6ªnã •Dú’ÈÁ3ò™ŽlZJH’„Ð÷¥M¯®£j ½AŸ¬ŸMƒ¯‘—–––ˆãˆ4 H³]LÆAì‚…ak¬®®âºþ´ äû>q3�I¢”ëÿèm¼äw~€O|üãüûO~‚U–<2S×1Mƒ( iÖ�¤Ò˜+ ±ŠmÈd=9BE¼]W–ÕlK:;Ê…]Σ„±‡ë{ô£±C±X Ñh`™Òz=y�#Nˆã+G{L”lSÀ–¿¦s.À‘4É:¶_N(ÓÙ”^�gRâÔ\ÙdÆHÉÀÔtI÷ÈKb"“ïå…8Œ¤ú™9û$ïq¥R¡V«M{“,¥X,Êç—f¤dS5[–ex�/9Ü•Je:|å Ó$Œ‰'öŠ|骆Y–YyǸy ieE¾ïa&%« ÁÁõåbØ9kP—v'é�9�X9yœÑ`ˆï{ÊÒ4fmm ‘&ì8ëlvÍÍ3Ûl1ìõðrf¡žSÄ�ž8ÎÒç?Ï˯»ŽäcŸü•z�‘3D·$«¡È¾ ™’¢(`¾ïIêD&ïU–eüÁ«^Êòñ<ùÉOfyy™{Ûo¿�÷¾÷½À—¾ô%Î;ï<¾ÿýïÓjµ¸ú™Ïä©ÏxwÞy'Ÿüä'¹é¦›h·ÛÿéµwF_ùÚ×¹ôÒK™i7Q•q౸8O»5CkvŽ$ΨÖZ4ü„Îf‡åã'É2×ó¥¹f"P”SÜÁÿÛñ°èàÁƒT«U:�Y–á{i²±±Ê¹ç>‚ååe�Û·mã+_ù ‹ ‹Ø¦N…<ï·_Â]wÝÇk~ïÕ¼ôÅ×ðô§?€w½ë]´Ûmi¸T,ñ|ŸLɦ´ý~ÿ´óÑ,)l=_©V»ÎT‚»õøèG?Ê5×\ÃYg�Åý÷ßÏË^ö2þê¯þŠë®»Ž�üãüìg?cÿþý$Ф¨†AœfÄ©Êxì'>ª® ² ®F*³ó3¤ ÔëU‚4Ä{DI‚¥ihºNÓ*ÐÙì’¡`™6šfÐéõH(—Ë,ŸØ S¤�¯nš¨9NGi‡l&~à“Æ©,±hZNßÔ©” ¬¬m0r†ŒGî)·×LÖñ}_î„£8@Éb„�½×uHÓ„0 hµ)º(Š"Ž“©|)§?'IÆÌììôµœ™�¥P(g’ FIšãú~3�H† ƒñˆÙÙ6ª&í|5%FI2ÙàW¤ý‚ªJ©¹išØÅ|®#�Q ÄŽK¹^&S È%Ï“:}Œ|¤«Ò«(NµÓ�4i6™m‘àP2‰ÎI'l´$�–ÚÒ4%�L—+ŠÔèÒü˜éP&™4`ËË0Èݧ@ÁPTLÃ�X]Ç;„a(ýZÂm<¶mÊiãÞn¶�Çôz=9ØZ-O‰ÓŠ¢>"ww�dBpŠ^mæô½ •Àð ¢UÒ|¸xÚ#Ë€¼|W´m >Õ5â4! B\wLx¨”   a[ %œ‘‹¦ìbîj+�Fxž‡ªÊræDÀ¡ˆŒJ©ÂÞ½{yü#/'t=:ë’L!4E¼-Sgu} ¡©|úsŸ!ÎRPQS®UÙØìR*•°m“Xƒ(‘ø)ÝP1- lj1 IŽ'ÍHHBaÏ®|ãßàÊ+¯äÀ�8p€n·Ë�7ÞH§Óaf¡…iH|_z]m¡<|ãß8mÍ8|ø0ßûÞ÷øó?ÿsÖÖ×ùþÀãûXžøÄ'N)½^MUèw»”Šº®R´ hBÅ2Lªå ¶irÑ—±kç>:� î¹÷ß¹ðÂGòÄ'>Û–ôŠÑÐá/ µZãÔ{0?^ý 8ÿ"�&ßøÆ7ØØØ`Ïî�=x�~ü±,éL=¹ŽÉfÕ¶í)&Š"š­& ñ\äïÛÿÛµï?÷Ò»È3êmЪ—‰<‡¹¹9âT¡×—B•Ù¹9Ý ³.Ër†aaZ6�oñ¦úuŽÿT®EQ€R CÃs‚ÐãÈ‘ÃyyãW‘¦©8îUWxß_ü/yás¸âŠ+¸ë®»xÏ{ÞÃóŸÿßøØ'>IµZ$ÀÓ0 –––p]™¶V«ÕÓÎÛ¶E‡§�ï÷S¾×¤79.¸àz½>µZ €‹.ºˆ•µµé÷AP«Ö@QI¤hŒ?Œ³Í4¨Ôk4 )iµ Ž[f<Óh·8ûì³Ù¿?ív›$I8qâG�e}}Û.rìÄIƒq*)¿Ë'NÒéõèlö8¼t”4aÚ‹‰ãÇq¦Sï“hbÞf:…‚Ͷíó4›UÓ€ tü!i¢dQì….ibZ•J‘z«ÂìB‹]»¶!œqÆìß¿ŸZ­F·Û¥^¯³°°@£Ñ8�–<9*•ŠÄÀ§Š®‘pÀ—ŽÐŽÓ ¡™ll8vb•AL$Äa‚š J†EÑ´©¤ 6:Rý5v%Çt]~™¦‰¦i¹¯‰›CV“)fro&vº®Ÿæqsª¼v:rfòsbKv36ÝjM0]øóŸ™|`UEAª"ЄôHšˆ|ßÏߣ²o hšFÈ™�ååe:ĉ'¦MâÙÙÙé‚Ñï÷�Ç8¾¤$QHGr05“ª5¡ª²äSV¡ªÊ^�"»óR¨ jÓ€8¹‡Q${œ–eQ*•¨Õj’`bšDiÄx<¦Ûï¢[&†¡¡ê-'z›¶´ÛŠF¯×“H…8Á÷]Ò4žÎ,9£1ßýîw§ª® ¡|‘›››ã¼ûÏ9ïü$dÓÑ� 9zl™ùmóx�Gx„±tùͲ]W±mCW€EI"•œ4%Ã÷}®¹ævíÚÅ•W^É•W^É»Þõ.ó˜Çpÿ0ŽñÃPW×á�o|ãi$ˆW¾ò•\ýõÜyç�Ü{|wî¹|îæÏðæ7½™ .¸ '½Ø´Z-Û¤YH’¤iŒ¦Ë äòò2wß}/KKGÈR¸÷Þ{9ë¬søÀûÿž?|Ýë¹à‚ ‡Ø¶ÍüÂ,Ï~öorøðQ^úÒ—òýï�m�¸é3|ë[R¼pã�7ò⿘Ÿß}7¿¼÷.LÓä5¯y ïxÇŸñ¶·½�O|â(ŠÂ‹^ô".¼ðÂéæþï|×_=·Þ*wO{ÚÓ~åÚ_õªW�víi³}ûv–�a<ŸV.»qÑhÕiÎ4QušŠ]Љ"�8 Ñ4AÁÖ¥…ù¯y<ÏcjjŠ·½ím¬™žÄø½�ªi¤Q„¦¨¼æ-¯Ç�3ÆF†Ñ…+¿óâÎoßv'k'§8úè£ùÍo~C«%²Ç^ýêWó‘�|˜^w-ÕŠÃ žü(ÛnµX]Ydýº�tº-I¥Ûí±fÍäs>ÏÇ>öQ¶Ýý[^÷Ú7rç�wîWà�<ò�<òkÖ¬áÌ3ÏÜÿ5öìÞůùo\tÑEhšÆUW]ÅW¿úU¶nÝÊ·¿ýmî¸õ&Ž=úèA/ì–[ná?þã?Ø´içŸ>×^ÿC>ú™O’D£•2·ývÛ`÷°ù¨­LL¯exx”f³‰©(ìܵ ]Q˜_Zdãæ-Ì/-Ä[ÔnשT ¨ªd“f»C’d(‡P >×8d`Ë =¢V_b¨:F¯×cûö”KÕg?¡zÁæ„㎧Z­“““\yå•\yå•|þóŸç%/y oxøñÆ9í´Ó8ì°Ã¸é¦›(•J¼ë]ï¢Z­þÁÇo¹é&±�ít(‹Ïz<³Þ<£É²„*ƒª‰ÄOM³0§& ý6N¡€S,P¯×)–„1RV|/dpôóº©1::Êòò2Žã`Û…A% CTE' #œR1Ï)® QYo¾òî7Àû“g?lÊ.š˜E“F³@¥ûÅ/á˜ã£c �1;;‹®�¤dtêËLOŒpÙe—qÙe—ðŽóÎæu¯~=×\û=F‡G ËX^^ä�û¶qÍUßfnß^ñ}tLZ­�æ ²¬²fÍ,Ëbtt”}ûæùÙ¿ÿ'ŸòR®¹æFGGɲŒ…Å}lÛvßú‡ ‰ò[çòË/çòË/ŽÙWŒmÛ¶0»{'¿ûõ�\wí<µkçœû>÷¹ÏÑé´ybû£\÷ý«xàî{yì÷óÎsßÍ5W_ÅèØ8�v›{‹¿þU~ýë[p†ª¨$¤¡ÿ¬÷þÐaXE‚0D’åüxâ ),Æ$$ŠB‚@AQabr”™µë±,‡ååUVj VW´»½C½¥g�C ™™–––ȲŒÅÅE6nžÆò ËŠeÖÎì§P8ä,Åïõ5?›ŸŸg~~~ðo>ð�pÅWrÅWð‰O|‚Ÿüä'lß¾�“O>™¯ýëüꦛø—þ…«¯¸ŠO~ò“Ïz|nv7;v<)p¶õ¬ ˜X E>ø´1Kâ$À”u4]9/JJ’ÆÂ+"ebÛ™8Ž…©dR,ÈÙˆI“4EQ5œ‚Íλè¶;˜¦8‚躂ÍU,”©×kŒWÆ/AÛNèõú“]HÒÙÊ'Í8‹Q5Y“Åш” e!­æ½^�R¡ÌÌÚq’Xô*�†è˜B>«© q’Å1Âôaa’e)¥J‰ÊP™,Iñ¼Í|öªeaižuë6P®VXéôxzÏ,+�&Q£¨:†Yì8]G’dUü0%‹…¡3SUTYEÑ¢L@=MÛMÏZM¼VY¦h;h²‚Ûí¡H2­Z‹uë6`6’”‘Æ"*<‰èSVÁ«ŠS¤dMÍ͹ È*²$“ÆBÝv l3EE“4%Í eàɯª*²)–aP*Ðó€¹$g¶er6ØMÂôäýy:Ù·]†ÈôE)aÒl6Eĺm‹ày^ )bG•©R¿Õ'>(²ÈQRd±óÉö{‡DˆL¼WUê¹,ïkÉŠŒ”Šâ†!Iœáz>a�2=c“¦»÷î£ZÂ0MæççÙ¸yÅ¢“¯œ5Wȼ·nÞÂW¾ò6¬[Gš÷J,ÇÆ.‘T…Ý{f1,‹Õ•úàuÕj5Â,att”v¯‹ãج[;Íš±q² â(ÅÔÌüz†ª¡æ`ßÑÑQ�$î¼gwÞ{=ô ¢ß‘Š FER©y-z]�Õz 7è²~Ý8v¡€£Ë ‰‹?ÿ:^Èb­Åb­Ã�÷ýžö *¥2ëÖŒ19Z%ì4QÔŒX–ñƒH ¦¥‘£i …B‘B¡À“O>I¥Re×®ÝÌï[æ×7߯ÂÂ…B UKi÷VÐ×) É:ë6N±°´ÊÌÚõLLM#e)–e1T) K)ÝNYÉ®–q,“0ò‰ÓˆßþöWÜô›_æó›¦èhŠFexˆ8ŠøåÏn䟯ù.ºmá>{æXX\¢X-S*ˆ—^·ÍÙïx#ŽãðäS;AV›šÁõ#IÑ×µ �4ð) ˜Ž�âvqƒ©”`™:ÅBÛÒñý.Ž­cšãK‹K+‡*+χ,@KKK,,,ˆ/V‹ +ÄYŒç¶)—«LNN377÷¬ÿ·cÇNdYÝ/ó=ĸôßäŠ+®äì³Ïæ’K.Á0 ž~úin½í6þý?þ�^§ÃW/ù*óþ¿áÒo^Š®éì�›ãž»¶ñÀý÷ œ²¦²šçx½………Á `iy™‹/¾˜‹/¾€ºúT%#ËĹºª‰Fðèh5?;›¹ÙYlÛÆ÷ÃîÅ비¾O&„©�qÎLMÓêv�eM2tÍÐ1  Õ´~ÚfŠ¢Èd™Pù¤9Ó¬ï„?0 ¿—å”Õ½óŒŽ199M·Ý¡×îâõº„a,¼)q$VÝ©,>V)Ë“J}’tÕD×û™0’œÑn·|Ÿ,Í™fϽ^‡,K0M#�ˆãDàiPÉ$•8�Ñ ?Q2èù z×GI"-CUe$EÂ2-z�ˆ Pe…8͸P–±ŠE:�.½^�fÓ#м^ˆiÚ¾y+†¡S[]Ä)˜ÈRÎ2Ë¢(Υ̒¢¤½A�yN± èš<`Ø/(ëÒ#ÿìÒD(ÝlÛ¦P( ±ŸÀ-I$³ä€•»ÿ|Y–&¢ØVA¨A¶,!*p]—ÕF�¡‘!�ò‰"ºn�•zMЯ Cì¬sÁ‚8âéD ˜� «ÿ|¢àÈX†5Xei†œçE} AQ(TpŸvË¥Óí‘¡ :EM¥ÛéЪ7pJÅA�}衇ØõäŽÝz$«««š&È’˜C†‡‡9ùOOáÁ‡æ±ÇCÏ»vïdd|Œz½N¥R¡Ùl2:6Œ,©¬,®°Ô\&”DlŠd�ªHø=—•Õ% s«µeTU¥R=ðF&Ibñ]Í"²TÂPMYÄe$”,e¸\b|¸Š¡*D‘ÄÄè0÷>ô¸¯6Uü IDATᬎÅ1³{÷áv[H�ËÔä’Õ?î”râŠèç¬Y³]79餓h4š„aÌÊrMì¸t“�;wbÚHÝ^�ÑQ‰Ê�MŠBAœ¸¯¡¸®OúHrJ–ú!8ðÝ–mƒ","Aûab¨ …b)I ½�F«‰¢©XŽM7ð˜Y¿§\b¼ã¢ë*«‹‹Ä‘G«Ñ¤à¤Ž¬› ™,®ÖÙ»oI–‚­éG1eE¥Ùhãö|%"‰34UÁ´Äñ¥ï{h²JµRƲ ¢èàžü‡,@I’Ðl6i4x�‹Š@*EÒhw–étÃA,ð�ã®Ûù£.ü¡ó?ø¬¿Û²e [¶láÝç�÷œÿgý† ¬ß°�3ßööÿôù'&†á���ôçóÎ9›óÎ9û�z­ÿNÁÂ04�6–f`ª:–j£�¤I,‘f ’bû‚TÐ "dEÂ�# Ô(ÂP’n—}ûöÃc£‚ß'‰äÙn·�$)´Md #`aïøþ÷ñ¼€r¹L«ÝäÉí�pã¿^Ç£¿P0ò4E–•áÑ1þò¿½›—¼à$FGǨÕV¹{ÛíÜ}×í,×›¼÷=à”?})““S˜†I»ÝâÑGâ×7ýŒÙ];xç9ïaÃÆÍ”ÊCºH¸å¶ÛøÖw¾ÃÖÃ6qMŽ 8þùÏÇQÐ Ud`%)õÕ†XTÓl¶xz÷Ú½.ü‘è�2ìÍ›7322’¯äÒDÅ3z^H¹:ÆáGG±0ôG]ä¿Æÿ7G»Ý¢V[ÅPlÕdíØ$¶f¡d +:r&£©I*£¨&(~œÐñºaH3ðYé´Xm¶PÓ¾9‚�L8�Ifld”Ã6làðÍ[Ø|Ø&ŽØº™8q;.¦a£(¾Š£Š8%M ŽSÞ凈�€B?ÌDB&M„\÷ÀÝÊ3JÏ hëÿnšÂëÑ�ÏŽ¢ˆÀÙPý4Òþqi­Ù ë¹ÄY: (ŠB±X¼gI’‚�>04IZ­Öàšš¦ ”‘}Ét±\¢P.¡[&aÓì´Y^]a¥¶J£ÕÄI÷Ãé9?’„" éxèG$9ÎGÎ@J3H„²º/€1M›$Iñ¼€Nץ뺤„IŒã8LOO2<\R6mÚD§Ó¡Ýn“$ {öìarr×u�{ Ôëu…Q(¨Ú”ËM¢˜ÎÍî¡Ój‹XŒ(¦T(2>:‚*Ë,¯,ÒétðóžòôôôAG¨ý_Û·ogÏž=,,,àº>¥b‰ >~>O=ù8/ÙË¢Nßwßôz=î½÷Þç|.I’ø§ú'>ô·áë߸”¿ø%‹E¶n=‚‹.¼˜×¼úMlÙz$]x1óó‹¬_¿ž—¿üT^ÿúÓ‘U™‰éq‚ØC3^úÒS8çìs¸ü/ç¸ãŽÃq¶lÞÌ7¿ù >õ�Ï Ï;‘Wžvÿúãë ƒ€W½êU ÖNÏðÁ~ŒãO< ? èyín‡žëR,W¸úÀ¦õ[9ûìs©TªlÞ¼•«¿w¯?ý­T«ÃœwÞ{¸ôßä¨#�¶mffÖñÑ�}‚cO8‰7œþfN:ùT¾ð…‹8òˆ#±m›-›6óͯ}��¾ç½yÄÀ~:öÊJ�¥ÅU�²¤3>>ÅøØ$¶i##úÂì¬Ê #Õ?¾.üAÂÂü<ª¬ ØjÐîõ®VÙºi3c£Ã¼øÅ/~Öù¿Æÿ™ã@oÌ;\×¥Ýn#¡2µfã£#º8Ñdˆ¥ U¨E’Èr qL„„†Ddi€§ÁÌôšš®£f²\¨Â<Ï£Yk066†®* UˆŠ cã#ž�¢WËE C#‹¯N×u SÊwâ—¢Yý ž[‘C!ÍÖ$�4KóC&“åª:)Ís£ª¥Ȫ„¤eئ…,˸n—²](å’$E–dP$Q벌$‰‘d5¿vŸ©§÷ͪ†E§Ó!ÈÍÇ’”{Œò#³NWD#;¶M”&øQHšØš…e˜øa Ѝn@’Ò "z�.�V‰±üˆy ì3Ôd±ÓL³I1Ð$�TÉ�çâ)P(•+˜vdÛ)¡›‚0ƲdlÇD’T�333|ík_ã�ûîgÇãO0T)‘¸�–È [39AÛuyÝë^G¡RæÆŸý;žßanß^6oÞL£YÇ.–h4ì�ßÇÄš)Vk&§6 ¨û–)}J¥"k&'èº=tÃæ°�ë⦾¯?E¥ç† W $I@˜ˆþlߟ433î]»èù®R®ŽóªW½jðI’ (-SSSÏbZþú׿淿ý-ozӛضíN Ã|ûíÿí öÛi….“kÖÏMÇ>묳øÂ¿Â»ß}.?ýéOŸ“tG1r”™$1Y–rÎÛþ ™—¿üå4 ÞýîwEW]uÛ·oçšk®>ä5ßþö·óøã�þÁ×ôÀƒ4¨2X¦9™ºšç‰�ìP¥LœÅ˜–†©ë$ÿsÌ! PèGuøQ„AL»×Å.8tº]áêÇë5±Œgo >õ©O¡Ê G}4‡mÚÄúõë(‹DQÌââÿóÖÛyä÷�!“2:6Â+^u*[ߊ®ëì™�eÛíwrß=÷�¦)£c£¼áô¿`ãfÁ–š�ÝÅ-·ÜÄM7ýŠé©*•*a(P2 JŽÅwq,?pq]—áJU4ÉL�Gû={æv§)_úÒÅlÛv?_þò—yÿûßωò'|ø�Äk×Íàzm C£\)P.ñz.V.]]]Å÷}’H„ŠÍÌÌä™?úÀø†!ó‹ LMMåܰdàF64ÑÈŽâ¡ s‡ÙÙY¦¦¦Å½,ÓêRr” –)Ì}¶m3>2Šëº4-ŠŽ�~K’Äüü<’$áù!ÅbÃ0øÕÍ÷ô½ú5'“å(éþñO»Ý¦Z­R,©¯Ö0Mòñ£�îâ>&'gHR�O8šÕZ‹ž k:íŽ‹ë‹æg»íST5RºÍ†©°f|ÇVؽ¸Ä†õ“¤i‚ïŒ�à˜�Fƒ8„Öj“ ë35=A}u)Ÿ&Çž¸•ñ‘Qöí[¤Ý¬3TÆ6¡yµÝ ï4FÓE_( CMi­Y²H-µ¬Ü3æ{„a?Cˆ¼#$¤Ë¥b9M)X6‘ïaª ¡'’xÉ"tÝÊ… Y?,ønÅJ]YV€Ó(IH³txUt�Jµ„2R%MSšÍ&·7�p«²Š® x’$È©D�d‚è ÈHÄdHd’Œa:sEc§Ó¡ÕéP«ÕD(ž® A¶ßH+šV:½ÀEÉ….š¢Å>i ªZ ŠUÖTÖ$P¯{œ*…‚F§ç’I«µEÇÄ2u6mÜÂ?^z'wGoÙÂòâ<=¯'¢ Í4²-‚8bïÂ"�®ËÞ…'Ø´e+Qâá”’Tb~©NÏ“è¸kÖnfϾ:•rI³He™VÏÅ.;T‡+ŒŽŽÓí ÌO¿w÷™Ï|†w¼ãƒûzßüïùÛO…§U­:À~êô¹çž;(@3[Žcai»8Äç>ÿY¢8ãä—¼˜ë¯¿ž›o¾™Í›7sê©§¢( Û¶mòu††Gèu\?üpêõ:µZ�œvЮ²kçš I×ëBv(:ö[Î<�J¹|HÒõ¿ÿì§4ZM††*ÈiFÁ29úˆc¸å–[h4lݺ•¯|åËT*Un¾ù&}ôQææörâ‰Ï;ä531òq];X;2lâÊ,-.†L’4!ŽR]FW&Ƈ04‰z­IüGÖ C URA×±M‡r¥H§×cýºµßH·Û;è ¼?z½…B�3Þ|Æ!㦦&˜��åMo>�O|âÏŠ[ذ~;¶?ÉëÏø .xŽÇ‡†FùÉO~D±X$ CáØ÷„JÍÐÄ$�F1 àõzø‘Çj³ƒ¦ËLOO eÖ3ÚUIœà¶]ªÃc,Î/¢h¦må¬4Ò,Ç‘ˆcË@G¬Ö&HÊû½^oÐH’DDDäþ]•EóRQQ|S�8 ðÜ Û2p{m4ÝDU  ÖϬEV$,MF‘¡“G{ž—;ü3:½6z åGF–ea˜ÂL)Œb� EÚj#k*V C#bÝjvpŠ,Cø•:mq<ôÔSO Iv¹ˆajœ ÍV‡ü=r–¡$1šÈ ºi£i⺺^dh¤J«�0¿\C•d†*U’TfϾyÜN—r©€¢h¾�ÛíR(ÚŠE4U“4`˦M,/¯°²²‚išÔuq„ 6~衪2(ä&d/ I2q²ßߣHò ;Ë2ëÉd ¶�‚‚©‹ÈíjuX`ƒ 3§ RŠ¢©d™œÛ vEQˆ¦$ª�jËùâ¬/«ŽòŇ<ØE%ž_ÿX*Š"�ï)±-‹v»�ïûHH芎Ô÷Á&‚’`h:¶)èÓQ’ )²8¢ñŽaåGy¶cõBÓB‘‘,›$yàž ²N¡X¦ÖèðÔÎY—k$±D"Exí.d VѦÝîa›I˜`k�Õm2ZÍ:åB? q  7ˆh¬®ðÈãO I ckƈã€N/D7l¢D¡çùtº²ÒÀ)¦˜ºJ uf¯'>“ñ±!6mÝÄòÂò€mØ÷ø}ö³ŸøX ÃàOO{-¦Q ãöˆ"Ÿ^ÐdýQ[ÑU…'zì€xØ»Pãû×ý€v§Ç¯oýçœó—œü’T²ï}ï{¹îÇ?f|l”ï^{¾Ûà«_úÆÀN¨i+õE‚08ˆŽý�ÿøm®ûá,ÎïßGEf~ïþîÓçó_øÊsÒ±uÝüƒ¤ë™™)VV�@StÊå2n¯7@“-,,Ðh4YYY¥^opï½÷rË-·ò�o|ý9¯yûí¿å§7ü ýØÏùx}u6oбï{𷨪èÓöÜ.�v Çq�¥ ËÒ5…8spÁ±hvÿ¸ tÈ”¥1I’¦‘Ðy¦1²”á¹ùª<'ù>sØ–�¡ÿá8†'Ÿ|’#�ÚÊyç�wȸ…ãÿäyœõŽwòñ‡zˆ ðÙ°á0Þû¾¿9èˆé‹Ÿý,ë�?Žwœû—ûo¸¹Yþõ_Äk^s:“Sk1 “;ï¼𸦫¦ÂØø0»ž~Š‚éàX&’,b´mËÂëöðÇ{,íV—­'K£¶ÌØðaÒn·qJETU¥ç¹˜…ÓÓÓܾí.––X·©B–e8Ž�a:Ì/ÖhµZx¾Àõ´Z- ›NÛÀõÚ̬�À05â8¤×ë177GœG…÷¿ë;wî<(G礗½šÀëÇ!Š*ah®ëR™X“Ojû'Å]»vâ ´Ú]4Má=ïú+î¼óNî¾ûnªÕ*²iqÑ×.AU%ÖŒW¹ìâoP. Žë>÷¹ÏqǶ[yüñ‡yÃëÞÌ®];Ù»w—^ú Ý \®äŒ@—X�i·Äîíºë®ðûÿÉÉ5Ü~»x’®¿ûÝïrÁpÙe—1>6M”ª�ªšÜtó¯8ÿCã…/|!wÝu7n<ègÓívÙþäS‡¼æîÝ»yüñÇùxmu™ùáH$<üÐQ“ Ôž‹KËŒ��¡© Išâ,¢0¤R)ÑëúÏšs5Y€‚À””¢™År‰8KI™}ÊÁ3‡çyÕ¶mÛ8üð­,Ì/ð™Ï|f°uݱc£££Å-èºÊ™g¾•›o¾™+®¸‚³Î:ë ÇMÓàŒ3Þ¨SÑsßH^€â¼ÿt`lx?HDc½ŸŸ#ËbwÚoæ‹|¥IÏ/Ë2±¬�dÂhÇ1Rš"à˜}/™xžGÏó)Šø¾�eˆÇIÀuÃ�hA–eÒ,¦Óé ”ïçj9IQ‰}� Öú!˜÷Þ{/Ï;áXZ­vÏÐó=fggY¿ù0ŠU•ùå%º½“ÓSÄq‡ JP5ÀÔj¹‚®…´;]Ò("#Æ÷d²4¤ä8‹�çR«Õ˜žž¦XȨ>fë{ßûÞAGpŸúüE†Áôô•jMÍPÔŒ™é©g}Ö¬GRd—–xÅ©§qÂqÇò–·¼€w¿ûÝ|ïG?&ŒŽ=ú8¾ñå i5›¼èE/b÷îÝ\xá…drÈ>€mš<òèÃ{ô1Üÿýìzj'Çs ¥R MÓ¨¯ÖxÍëþ‚ ÷ßsѱ_ùÊWâ8Îàµ}ñKrú÷“®o»í6ÞræYÌí�ñl\¿ÇÃýMÓ¸õÖ[¹þúëÙ¾};7näÆoä§?ý©è§š…C^óŽ;î ¿!|Nb÷?�ßÝöKâ0`Ïü<Ë««¤¨Œ�M`™öÀæ ”°¾'àÇ…b/H»–ÿ|²9 K×é¶;dqLªF˜†�Y­äÈ›}ûžÍ‚;éE/ÌU9îøŸ·rÍ•ßá´W¾Š#Ž:xî8Û6yä‘Ç`:wÜñ»ƒ?óÌ3Ð4ƒúÊ*=p?ç�w×_=×^{-¿úå/Ñt�Ÿÿüç(ŠÂ[ßúVZ­§Ÿ~:õz�SN9€ï|ç;ƒ×­i*†¡²¸´—¡Ñ\·G£¾Š,ƒãØ„ž€ÄIbä>Œ×íbYâφ¡v>‰„$I„iZ�fB:‹”šE(r&òkH škÆFòÀ¶”‚m±º*"´UE"ŽA‘µÁ*³Óus²³DŠL’‰DPYÑÐL(÷\”ˆ^¯GFØ…qœRo6D£¿ZÔf×Å2tºn�ÊPY¸­5…V»A³Yg|bË2PâTlU1Éöz¢(Å$W9ÅMá�(WJƒ¶ÖhS´ F‡K¬¦à˜¬,ì¥2RBWrQÙL“„F£�* 3©®«Ø–Á¦Í«µÅÅE ÝB6MÕÀPCâ8Í#œSâ Ìq4)ˆÞP&Bñd ‘ªš‰‰ª¨ U‡Ü6Yœa}”�øÇ"ETA–¤L‚8ÔŠT+Å8…4CWd]'Ë ò£¥àÀJ¿Xf9ѺϠ‹ã5ï…aˆi€$Bé1(2a¡„‰*¤²$c:–aS²K$ID–³ò’0Â.ZHªBDȪÁðð0NÁ>è~‰£dE0§Z¥Z­Òn·I#9K‘�I’ Ƕ¨5̬_ËÜÂ<¿ºù&¬b Í0(”üÈGJSZÍIÖ!K5Š…2‡~8KËu¹ÿ~ÌR S×�¥Œ(Î4Ó2¨T*ØÖ¼ÂNwßþišÏ;î¦''˜šžÄq lKáìÿövÆûB…©Ó`Î�|ì#üÕ¹ç2;;ËO~ò4Mãˆc�ç[Wÿˆ—ÿé‹ùß¼”‡z�ÓO?ý ¦å=÷ÞÅqÇÏeÿp Gl=’Gÿ�²vr-ÍZßó¦P(±yË‘}ÌqÔj«ú(þçÎK_úRJ¥wÞy瀲m˜Î€týµ¯}�/}é‹Üÿ}‘®Aбïºë..¹ä|_Ü[¯yÍk˜œœ¤T*qà 7Ðn·9ãŒ3xÁ ^À½÷Þ;¸æM¿ü…¸fG\ó”SNyÎ×Ôétò{NÃõc�4TM£:âàE)ív‡@�i·»„aŠiX¤‰2¸¯ãHf¹ÖbÃÿÓtϽw±aÃ:Ëfzf‹KK"¢×4Áó<Ça)ÿ V–—0t ÓŠ¬×¿á�ŒŒOð’—¼„Ý»wsÑEqæ™oâ[ßü#£!õÊŸô�q CCClÜp�=º}ðxmµ6¸1»Ý.÷Ýs7ïz×»ø»¿û;®½öZ!Î:ë,öî�cqq€­[·òÄ�0»gÇsÌ I¹wbdd$/¦¥“$¦i`Y–eÑjµHsTO’Æ(Ș–èׄQ€ë Ç·ªª¹K=Æu|" U£à88¶I…Hý|–$�34¼®8‘HÑU™±Ña‘Zêy(²FÏó÷QU¡dŠSapL2H2^œII–>»žÞ9øŒvïÞ%Rd».­ÕUÜž�øL­]�S,%ñÀŰ²ºŠÌŒO#¥¢ 6[uLÛ¡24ÌÚµSHªÆøÄ$+µ:A”€¬°Z«~Ž¢'bY–05µŽéÉ!ü°ÇÂr›ñ‘!4-#N:ùÂCÊý)†n“e~�ëI)aè“äH›R!%�Óf&"Ú]—(HÓ´)ŠôÜ6Š’åQÙ�$û¡�išåż@–J˜¦-ŽØ2™( UÕÈ2‰8€Ó$ÉHÓÓ´ÑU-�v�¾¡0 &“÷Gm÷ P_¤Ç1…‚pù÷wC}0m±XÌáµ ̾ïçB�“ ‰$7¥jŠŠ¢íâ‹¢ˆ,œ±@ʈÂ,‡äƒ…ˆEÝÒÒŽcÆ™$á!a I2�N‹É‰-$Iº™ MÇÐe¼^—,Mxzv7»fwÑê´iö:¤ªA&A«ÝâáGajÍŠÅ"ÇÁ°|?”·K±`#K¾ïQ©¥Z.ah:Yx.�?þ3ÓbÎè¿æ{@gŸÓ":�+$ÿ²Àôü!êô»þê~þùâÓŸùÝ^ÛtHƒˆBµJ©Z¡UoŠzšÐéöHR ÏO•ÁqX©5éü¿Ñš˜ž@Ó4Úí6«««ƒ�H?]²¯öúá®åªï^I’¦üìÆŸ²víZEá…/9…ÕzãYq K‹û8ûœ÷±²RDÜBšÀ)§œÆ×¾öÀ³ãÂ0â¸ãNàóŸÿÂàñ•åªÕ*ͦpgÿî¶[ùËóþšÏ}îs|ÿûß ßøÆ7òíË/eãú­ìÝ»—�·P­ñýk¼ÿCM3ü0bttœZ­F¹R¡X,àz]Ò$¦¶Z§R-z*QÑn·1M“r¹ŒišƒÂÐhT*•Üi®¢Êš,�ú®çy²’bªF.+–$‰f«Îøø8ÕrÝ4QªæçiÖk8ŪȎéz”«2IÆõ#² bbbJ°ÅüYÕ‘Ú}EQøæe_å;ßRÔo|ë+ŒŽO ëMºþ"’ªRµ‡òx‰.ÝV›‘Ñ! Mű �N§Ãòâ"ÃC#HHìÚõ›5�ññIê�ÃUaš ¢˜�Oϲ´¸@˜º†ëÈŠ�aè´…¡Í2ULCjyaH‹H·Ý¢R*£ê�àúQR(E§Þ¬Q­ Êp¹\¦Õj é¹çÑn ¤HÅ”J%ÆÆt§ˆç·QUu`FŒÓþ.2>¨wgS(èuº(º– RUìX¤T´Ô�P@U TU2üL‘$‡“ö‹€nYƒ£µ¾Ùµ_|Â0½õͨÀ �ÅAH!ϲò ž òïbF–¤ª6(lš®#Ka.hȲŒ$�° UJPT-ßµHŠNG å9Eãk&i6›øaÀÓ³s4 Ãb¸4Ì1GM©`Ñi7QU•n·Íš‘âħÙn177G¹2DQQ�U…ÚJ“åF�0ŠXZ\&örŒa9ƒ,¡0 ‘³]ÑÐ*E6nXÇÈÈŠ*ãû.¦¥311A’ Îà;ü\ã‰í;øäg/ĶM&׌2>. ‘ÿuœ¸œó¾¿Æû(&Šâ?ȴܳg–Çy�ÕåeÖ9C‰{iqq‘z½žçle\ýÝ+ùó׿žë®ûåJ…4I™Ý³‡[n½•�}âÓ¬6Z\zÙå<ðÐüûÜwò÷ÿ÷ÔM~ÿûG¸âÊkpŠâä§Ï¶|ô±ÇøÉO~Ìw¯ú.ÿøÇ¹ä’KȲ”�;wò£ëÈ¿ôóÒ?û3Þþ¶³øçü€jEìgçöqã¿ýœ~ìÓ¬›™âœw¼•«¯¹†Ñ|¹o~/wß}'?øÑÕÔ-æf÷aÛ–èÿ£`„ÝC×LÁÇôB²T¢ÕibÛ%:m—§£½´;< û¹Ø9ÚÉ'Ÿ–,…B¡€mšLOO£ê&=×ã�`jjŠB¡0È7¦Óép÷Ýw󢽈0Œøà‡?zPù³öÇ1¼ñ�oäÆoäØc�å°Ãã†n T*ñè£�2::Ê[Þò–C>~Ý?ÿ€ÕåE†*UöÍÏ‘¦)ÿä§yïûþ†Ÿÿüç¼ùÍoæÃù[>õ™ øÁµ?âðÃ� Ùlò×ý׌��sá…Ç1ïÿû9ù”“¸è«£ª:^à‹ÐÐedÍ’”Òm×®²oß¾ÁûRUÖh4pgp£ö‹P¿Ákn7 Z*#ePo,CS*R0,ÂÈ#� E‘êúÞ à,Š"\?¤Õö(UFˆâ˜••UTM€÷Ìí#•`bb’jµÊÞ½sXºÁôÚI¼žØ 6–¡çÏÐju(•‡ â˜'ÍÐY·nY–0ª–¡‚š?9>ÎØhC‘™žš`¨RfÝÚiÏc||œ«¯¾šR©$úe âs clÍ8‹KËìܹ“ U38þø©5Z€$Œ¹sóxžÇHÓQ,ŠïáòÊss³ 6‹‹ó”œ®×cãúuT‡Ê²†$˨ªŽ…ÿ‹µw�µ,»ëü>{íµßû¼Ï}ß[U]ÕUí®¶¿ck`†ñ2‘"$`’%b�òH™ÁC&0(„0I”8Ñ(‘˜€4 'Œ1Ó¶Ûnwõ³ºëqëVÝ×yŸ³ß�µóÇ:÷ºÉØÉHÌ•JjU•ºtî=g¯õû}jµ¶‹O"^yõyežP¯‰Ï¶45e™x6ŸøäÇ/c Â�|ýÅyt¨ §ƒµÛ×÷}òLƒJ…°±�IRà{-’$Óz#ßõ¡÷ð§ú§? ¤@²þ¿ã¿S ûVVóÊ•+ÿY¯×¡QÐíõiµ;d¹öxòÑ�~”n·K»Ýæ‡~è‡øà?ÈË/¿LQ\½z•^¯Ç3ÏÞæç~îç�]yðàÁå¯OúÓ¼üò×ø{ï?e6›ñ /ðÚk¯ñ±�}Œ_ûµ_ã•×^áŸÿæÿÊ/ü¿ð-ÿü«_ý*÷îÞ%ËRªJ./fïÿà‡ø�ßø @ëM_úò—xýÍ7‘Ââ§~ê§øÒ—¾Äç?ÿy„|ä#áÎ�;|øÃæúÓ7øÜ}0)ò’F5¬’DÿuEà{`è[óöö6Bæóù¥³)‚Ëè;4Q1ŸÍ©Ê!͵ˆîÒíuéuºX¶¤Q5Â00„Nsûž‡‹Å’$I±]�ÙlÅr³XFLgsâ´$Í â4GZ6Ûx~Èl6'ÍR„iQ•nÆu=¤)ð‚€ªRÄi†ãHË!NRVËC#©…ÉÉÙ eQaÛÚ¶kIÉóï~Qqåà †)(Ë a �­×D>–”4��%%Yš2�)ÊBgq”±^1iÜ…–«%Blnnè hYÐ(0 ‰”ãñ„$É/º i;k]FQU5B˜Te}‰18<|†Àq݃å:Ð(*U­MºÍà�µ8ÂXRR–�RØë5Oš&ÄIŒ�&žçÒéti·C|Okvª®)Š gBn.�®óVjÞšít¡û\L0¥£Ž8ÇÑëÞ :¬aZ¿©jÌw0Ž”R˜Bàz.¾ça;öÉôÂL TUS«õ¤8_�Æ)Òr[]²¢DšÒrxóî[óÑ鮿×5½^—gž¹Åöæ(ý€"OÙÚÜ`sÐc>�â¹Ož<æõ7^çìüÓ²PB²ŠÎgsªºa9_a»Žë\öž<9¦V%¶”ø¾ÇÖÆ€�AS®±êJQU%‚4Íp-Ƕ±mICM­°l‹�áRZ¼øÕ—ð<—ºZ—ȶCLa0™Œ°-‡É|A’Äø®ÖëhôÚ¶1 ”aRÔ g£1e¡¦%hTƒªôû\Z&ªQäy�ï:´ÛmËäæSOéŽÃ\Óã(f6�a[6–­{ÃÔMƒ´,â$aŸí5Û¨Ûë!×�ãɈét¢= ˜Í4Éó\Ë1Ò2�¦ K" ¶%ØÜ` ¶e"¥ �¡PuIUåDÑŠ1:_P• –eÒj·ql›ª®¨ë S<û̳t:]B¿…”¶Æ‡W5ç§£µö¦ãíN‹7®ÓëwY,æ,K„iÑ4ú™`Y6žï²½ÑåÑ£G¿ T@ù-~U@õmWpi^ð�÷¾o ¼ªñ¼€še&ó®ëòðáëüÇ?ùw�R²õ£éŒEŸ�ÿÿâ>ó™¿Ïç¿ðþÖ¿ûÃüò/ÿW¸®ÇÑãGüþüŸüîïý LÓä3ÿèñƒó‡ùÅ_üE|ßç•W^á÷~ï÷x饗xæÆÓ! TUÅ{¾ã;è|äcß¹Îà„|Ï÷~¿ø_ÿ—4þ»Ïþ�üÀ÷?¿ó;¿ÃÞþ­PCì~mMaýß~÷w™Ìg8¶îçê÷ûF‹¼ˆñлz_ºtÚ6³©6ITe�ïÄQ‚%mT­âapçÎ+Jòwò'ùÓ/ü �N‹ûîÑm…ìq÷îAÀùtÆì�»´}ÃâødD•¤l?}ƒñé A‹ÕPdyÂj%pÉF¿G+ÔÁã4ÕÝ€RJ¤°P ŒF»ÿT¥|ϳ8ØÛæðè1óù”Õê1�ÒÚ¥a Ò<£ëË€m  A‘WLgcÒ$³L|Çfsg!uVHp$y£+” Ôš„0q-›N[wº®«Câ‹9/¾ø"MS3�./†Žï‘•Ç'§œžžòüóÏ#½ò�ÍGz ›¥4UŽiÔ¨º$Êjª,[#Ì—t{-Ú­mšªäê•-TU³\Ìévt¶e6ДE�©$†�˜RP³Éi…TeEU5km² (KßeÐëaY‡Ÿ°1ìcÛözòjcYZŽ£׳)²œÕr†ã¹ììÐë8vÈáÃSš¢D™&4ßöXùW¾¾íßüÈG¿‹k×®ñžçÞÍýû÷y饗¨›ß yéßà#ú(¯¿ñU©ˆ“%Â�HË¢Q£ñ˜ÿàoÿûüì?üì_å«/~™þ`‡Ï~ö¿ç¹çžãWþÛ_Á–’ííM~åŸü~ö3ÿ€F˜Ü¾}›ý½+DQD§ÓãþàyóÍ·ùå_ùoÅt:f{‡ÝÝmšË¼HÅÑÑ?þþG|þ�¿ÀOüÄOPU?öc?ÆýËÏs6ž0 (+ÅgÿéÿÌÿô¿üSZmi ®mc»>®è†UST%�N/ðÉʘ²ªÛNŽuR¹×ë]ÚЃ `8^îó/ÐÒ;î0 q VIŒ@ÑÔŠF•F£èu:žG¶0Œö¥³)ŠS–ˈn§Ïá£3*¥�®G™—4HL)©”ÁÙhJ++ÉKEƒ¤A ¤Eœê,HY¤˜–M]�ë‡DqÎýû©•�i:„¡Mž•œŸOÝÞ0ŸÏ±ä>{{{<99ÕTÓ¼àl¤K0µKn“ÅbÆhtN§ÓE �iJv6†„ŽÇt:ãÁÑc¼°G«×áôô”óóŒ_jWžãë[pQºRe6åÞ½‡Ñ övvyúé§ÙÚà>iƒa�fËåœé̤ãk„º-L-ð§ÙåÚ N¿É&ò<�d>¿÷²±5¤72ØØ¤©áË_}‘,Éùû?û=<Â0a±ÌøÐ‡?ˆ°ll×ãúµ«„-­Ÿ¬’˜ñxÌ×¾ö5ÎÏÏ1DÃÝ7^#ÏJ¤ç“1nà㺺²âèè��|àƒôzŠ¢ »FrÿÒ/ýwîÜáSŸú?ýÓ?Í¿÷£?ŠRP”5q–bXeU²ˆJ„©Â�N·…)M ÚÝ× 9�˜-&عÅ*ZPU.–4hµ´;/ŽcšÆ`ÿ aØf<ž\j@Žã!eª3/eI«åâû„¤È2ÊR¯ÌB×£Q%ñjA¼Šp6<à /ªKK£.´”ô;]0¤t¨ò’F™Ú­f˜ LjÕP¦% ) i{8¶�m¹,âLßÞ¤A–j÷“a˜EE––`X4MµFX¤IŽe ò¬@JAš¬V1‘aPVŠÍÍMÞxóM„loo3žœã8��‘¦A¯;À¶%I¬‘¾[›Úí6™RL—+¦“sâ(¢®Lá ¤@5‹Å Ï·ql�ôV åÚt€°×s�w2�ÒB:u¡Û„)XÅ1Že±we�½í=zÃóùœébN™åkAÞXãBZx�¤ÞýümF£g§#ÎΖ<8¼ÏÓ7®s°…Ð÷Ã6®ëPåzR]°Š–´\½{w\› Ô!Ï¢(°¥�ci'X–å—¡Ò‹©ç�a¥Ôeþâÿ�ºÐ…7ÐÓu‘S”išHic&÷ÎKÐE®Hš6Ò¼0X˜këxCÓ4�Á½·ðõ;¯pzzÎõ7.[µ¯\Ý'ÏsŒ¦áÇüÇ™ŒF|ãß Ó qƒÙdŠc™|ß÷}¯¾þÿûïÿ>W®\áðñ �O) mvXEV€°«ù šš"OÙßÝ"‰V`XdI‚ïéî8ST]“eù%VÖ–#q¥ISdQ…){Û[¤eÃ2J˜LW”¥Ò ÂvaZ¬¢˜ÉtÆÍ›7yc>çñãcZ�õý]öö÷H2}hÔbÍ"²¬ËiÔ‘F#×¿ï „I]–Dk+ûîî.y’pxxH§í#š†<�QëÏSš&xžƒíèŸCÕ€ã»LsºƒQ¼¼lzh·C�w lL Xívˆe;ÔUÉhtF�ë0ñöƃnKJò¼¤*JšuõUSëh„ÑÓ0‘Â$NWXv€éÊ5™WO9–pˆ¢ŒÉùÕTŒÎ§8ŽƒÑ4˜fÃþÁYšcÉi3[œbÊŠÁ°CVL'cPƒ¡†JV¥ø–œ¸o÷õm5 ·î?äO¿ø%¢$c±˜“å9�jX®VìîîÑï÷ùÂþ„ßþíßæ×ýŸó¹Ï}ŽW^y•›·nñúkoàzggçœ�ŸS–×nÜà#ý($iÌ*Šyýõ×Y,æ—·5DZðý€ÍÍM�®Í2ªªÄ<º½.[Ûô:º½6½N‡V«Eà8äyΗ¿üÃ~�n¯Çbµâ?ÿù_`¶ŒÈŠ‚Õ*¢¡ÁõmªºÀ´ :Ý�Á°§×NFƒ0®ç±½³ 4TuÉ*ZŠv»ÅæÆ�,Õø€`½ÏŸÍf—6ñ(Š0 ƒn·«+d|Ÿ(о¹ó/J„i⹆0Pu aÈ`ÐçôìŒ,Ñoì^o@Q”ܽ{�'OŽ©´Û}¦³%‚²VÄIŽ!-0$¥ S£² Õ€´$Ú^›¥‰&| “¢jˆã”,«±)mâ8¡(*Û¡(rL)0A¿ßcsc¨ƒ˜uCƒA–Ü¿wË’ºa�j…¡Îð(EàX¦Ö�lK¯CÏFçÜ{p�“ã¤% ‚ Q&æÚâìØ¶­sQ«ÕŠJUX¶…e™ÔuÅb¹`4ʼn¶8¯ÿÍñdª¿ïA@·Û¥×\N–%¹ÿö}Ô4 TEYÑÐÐjµ‡llÙÞÙfow ×,WKòL[ð-G"¥IQf4Já8aKtšº"Zňµ¥ú”çØ­V Õè¦ i[—&‚‹æ¢ö�k·‹î¸wöÆE�çz�”{Ѳ}¡‰µ6ôÎ*Ÿ‹uèÕÛ|¶`µJ°—­­’/~éÞ¼û6Žë1O0 ÁÁÁ�ÒÁâÇyåÕ—A)ÞóÜsÌf ´þ”g ÿìW•|ðý|â“ßÃùhÂ<Žè †œŒÆÌf iãùW¶ÀhðaÀæÆE¿ÛÕǪ MšêJQ•Šª®©«FOÊq„çØHË$Ëв [HiñèÑq”³¹¹CU)ÒeÄöîi^rvz‚2 ÆÓ©vS5³ù”““S’$ckg›ù*a2›Q«µ]¾¬±¤Ä&hE­JÊ¢À’‚çÞu‹¼ÿ½dqD²ZðôSOÑívô (0L“¢Èi…-�“mø IDATlßÇ”q¢]�«Õié–uÃh(ÊŒ^¿‡ëÙX¶E§ÝbÿÊ>W®îsp倧o\g5�á{.ñ*b:c4º[“$IñC˜˜Â" Zëð´A‘×,W+â,Ãrl C·‰7 lË�Æ ZÅD«Ò´H“À,�ɲ„N§­Ww…Ö‡ £ 1JlGຒ,I9=;§Û0�®´–Üìïõþr�´\¢(â­·ïóžwß&lwHÒ˜¢VxÂ$É >ú�ߥGô²d<sëÖ-¤ãRÔŠ£ãGA@·§;кƒ>w^{•E´dg�'§'T�Z'ß l[R9íÀçðþ=>ùÉOò¹Ïýߘ† ÏS?YÌ|K�ìóùÏwi¯™*u]sxxÈÙÙ9¥j°]‡j}“Ê‹‚°å1è �68®É`ØÖc«¡PFC‘%ÒDØ0Üîc/%ñã%~à´|‹Û››dYÆh4Á0 Úí.I¢ÞBèÛHYÖ€À²ªJ]¢¼³¢ Ûïá˜E’’®"l)é÷:ØžO¯7XóU"šÆ$NS*Õàx>ýÞðú„a1žÏÉ+!mÊÆ@Õó�—¦gÐÔ q”®Çí(‹š³Ó~«KU*,Åv+âtÌr)9¸¶Ïp£Cœ–ø��%õ·Ê½ÿ|}Ûèïÿ¾¯ÇÂá°ÏW¾òE¤›ƒ¾¾åºï~ö]4Mà /¼@;ðùÄw}'o½õ�ë°¿³ÍÎÎãñ”ÍAŸÑJõÚ�;eÆéé1½^‡¼¬ÙÞÞæéëOqóæMºÝ.‹ù’ßûÝßec µ•«W¯^#ÿü…?£Èr>öá�`™’É|ކ<¸ÈÃGǤy�¶h…]q‚e ×'Í–kg‘�ç[xžÏb1!Š„ÄqJ‘×™¶þ†ž·Ögò4CUõå͵Ýn_†£(ÒH€¦!Š"f³ÙZ|Ö¸iÇÑ¢¥ãZ4JãPŠ Õ–&ËUÌãã'8–Kžhko…A§Óåê�ëÊÀŠ\�½~«�unS75Y]'….ùQ9¶ti �ÑÔTe¥Sì®�gi’¥çT�AšÅëÛzE»Ó%ËR¤°¹ruŸëo|Š$]ñÒ×_äáÑ#Æó1¾ã2�±m‡A‘×\{ŠÕ|Á•ƒMÞzë-ý>a 9/Ò´ðÖíÜY‘³µ1ÀZLæs^úú+¤Ù Û huú¤YN’¤xžKš•LÏΰ]‰!*JËEÄÁîí6{{{—¤Ñ~¯‹RŠh¹bŸn·Ëh4¢®t‹�ej!{µXråÊ>äíû§œOÇzRµ%Ãá�ÞúÀD£ª±n›0±-—ÊV,#mµ¶Å"N8Í�Âd£×§ßía¨†ª.PUMYL¦çL¦úÁyYàÈ­V‹ªªX.—ÄYF]”`ŠK~�Rв¸h³X»æª†¢úfgÝhwÖŪHÇ:—ÔÕ‹¯Ýšm`�åAД^¢„$N3F³9yU´4Ö<\#<\Çâ寃�á€ø³ŸáK_ü¢ÙŒºª‡F)ÒdÅW^øsž¹ý,ÛÛÛ|åwp¤‰òË,§H3TV`4’$чižqõÚ¨+ÚÝ>³Éˆ"Ë�B²X%éà[.ÒÒ«â2ɉS]–Z9E•³ÛÙÁH"ò¼Ä²lnß¾MY ¤°µ½OÐê§ÚÔßÜ¢,s|ÇÇ Û†A/`ow‹óóSžœSäûWð¥M¢"lËAY Eƒe6´B—å2ckØãæ�kô;>¾%0›šétÌÍ~`}yu¨ A’Ì— z½u¦�a–ÝàÚê ßõH“‚ª‚Ñùœ í!L°m“ÆP4(,i`KIZ”Ôe†¶É’Ûs.³‡Ëå’²(p]=,ˆB÷Z…6¬”µÂ÷}¶w6è7%yY“e%íVÀd´d>�ÈÊ Ó´PeEœ¸Žµ&´ÃËå ��”‚Ó“#”HB›4-9;Óïm°·½ƒm\WR9¥Q|Ë3å[}}ÛÜáÑ9¯¾ú/¿ü ŽŸ<"ðL„¨�^{í½^›8^pvzJ§ÓÒûÐ<£ßïqtôa€c[Ã`ccÀl<áèð>�V@è9<{ëî½…eš\¿v•kW¯²\,8;=£vèw‡|ü»>A§´Â6ƒn—ª(hjý�:Ø;Àó\\ǧÁàÅ—^¦ª æ‹‹(Á´|”2HSýaî÷û_l;Ø–ÍÑ#f«ÊŠFÕìlo±»³�"‰#6†Žqëæ-¢åŠ~·K-étÚX–v‰EÁ|¶d<ž „Á`0@)ýÐ÷}—Á †Âv,ºíIQä™n“vêZ1[,8>;¥1tµJ^U´ºß#ÊR,GsmZ�€Re¨¦Àràà`‹íí>y²`µãΫ/cJ SJÆã)i–³µ½Cœdœ�žÓû<óÌs¼ðç_%[H°M­jL)E·×f:Ÿc{-ÂV‡G‡GL¦3\×GH“¬È‘æ7mëeU"mÝócQÕu»[iBUèNBË2©Ë) †½6¦ÐÎÂ$މW1¶%H²$G ‰!ç㪩A,Ûá|<áæ­›ºZÌh0-“$M�Â$�S0Lf³eU‘•e£È EU›4†ÍŸüÙWxpø˜8Ëpe€å˜C!DMà9ØÒ`µ˜Ò鄨¦"KS„ÑÐ C¤)Q•^g•¥Â0�aพïST5q’‚H)°‰ã¸4¤YNše4€´lÒ4§ª+ªº¤¬JÒ21DƒZëAqœÓn`û-ÎÆ žœ�ùÚ�WÈË,}ã΋”��-’(¦í·xóÕ7˜ž�è„>6àJ‰* †ý._üã?f8ìrrò„·ß~›ª.ñBŸÃ£GTU�¢¡ÕÕÏ aèËÚ ? ÓnÓnw†‰cû”µBJ—ã“sÒ¼$NrjÕ�­V‡“ÓÂÐ!/Rzý^Ð"ŠÓu“¶ÅÉɈ£GG$™Îï™–Éh4"/+×Åu\¢ùŒWè´Þ÷ümþƧþ wハh “)»[»´Ü�–íP$ ‚ ñm” Y&L'®?}@·ïÓn…<|pˆk‡ŒÇ Š\pr<âÞ[÷&4MN«í0èýë­à¾íôÃëGh·Ûìííòô�«loô�ÎX.L'â(âÁýû¤IÂææÆºú=çúS׸zõ ®írëæ-ž¹u“ƒý}ÞõÌ->ü¡ã{‹Å )%ïßû¸võÑjÅÙéÓÉŒ<+xtø˜Ñh‚’ªÔ©ôh1GÕ57®_g{k›ƒƒ‚ Äv’$ãðÑcVqLœ†IÓˆõžßÄu<Ãq¼bµZéµZàÓëuih(ËU×äY²Æ›Ø–¥¡L•Bš&Ož]îÔµ¤mæÓ©~-ª© Ã�½½]Úí�(ŠH³ä’=´¹±uÉ ¹Xz¾OÐg8ÜÀó=ÚÝ–ã´BÃÐk )0ifƒZS¢a0èá{¡ïaš½NÈÖpH·Ý¢Ýé†�æÖ¨¡½N›�á½~‡v;$\,Ë@І¼Hè´ò<¡Ý yóÍ×Éò”4ÕZK–fk·–EkDöÖöŽ~]Ü{ë>a»EødEFž¥dEJ¯Û&luh0ÈËšÃÃGÌ&3­ÅÔµÆ#Øz7Ý kj Sê–j†”¸¶£m¦µ^uJ¹îœn†6®'LÅr±d2“Æ–”8– LÎÎNét:SÒn·iwÚ } aèöwSÐ(Eže=:b<ž�gz:è{Ÿ�Ñiu©kƒ^oƒ^¯Ï“ãSÎÎÏyõõ7XEsZ­@6UE–ÅÐè꘢*©×.·,Kq\ßs‰¢„“ÓS\ÇÕlžF`J­!ÚëŽ9Ï󈣅¶Ï*­ÿkaž•L§³õºN¡T�î7k�©©±¤Íd>çÚµ›œ�f(ÃâŸýÆoe9H“:Oîlƒƒ^Ÿûo½M; \—­� ežã86iœrûö³Ÿsôøˆã“�’N¯Ï*‰™Ì—HGW4©FgzªªÄwv÷vÙÚÚÁ²-ò´$Ë5n:M3Tcàz>I–á¸:W×%Yºâ`o—Íí–ÑŠù|�íº,f+þüË_Ö�ÚFƒe;<~ò„8ŽY¬–ºFh9GÔ ¦¡@åôúý^ÏuxíµW‰V1Òp $«Ë’xŽ…ï»4F©ÃšyŠD‘EK:¡K¿Óâúõ:�6‹åŠ8ËIŠ’³ñ„ª©¨•Ʋ¤qŒëÚ,–SzÃR¸œžNˆãÏïÒ(Áéù›ÛCLÓÀuµ}ºÌ2ª²Àº}Ýñ\ÏÅ0`:�Ç  ªo6«7(ò"Dz$yUQUEUàyaèéσç!¥CšLfK’¼Är¢e¬ÌÝFÓ°œ/ˆãuUâ¸yQ«‚"/B&ÛÛ\½úW®±»»K·×!\:�iÚ9 èsŸûCƒí°E™ç<žNñ<!LNN¾Àîî·o?Gè•Âã£cö÷® I+ì`Y“ÉŒ³³3†Ã!žçqãÆS¸®ËÕ«W¹ÿ>aè³¹¹ÉÓOßd_3mL“?ùÂY­´IA&'§ÇôZ¾OOyðàß÷×ÿ*¦48;ã8a2›/q-a;”54�SZ¶Éx<&I–k³Ä@ÿ€T]â¹:%]–9ƒî€¦1˜ŽÆ„žÏ믾FØn­‰íK ešæ$IÂ|>§Õj±·e@tqíÊÃh�R0�9>>¾t·—‡�ëºØ¶v°\/ŠK/r#žç‘%‰þ»Ž‹if¬V1�Òm)‹ËÒ�H˱×ú‚¤Ê3D¥A`Y&aèÓíwÈ‹‚²,I‹ŒN§ÃpsÛsÙÚîs||LE¼ýö}\×£íø4U‰#M‚V[š”yÊîö&¾ý~Þõ®waIÁááâÕ’å|Šg[ 6·p¼6ª.0Eƒëé·]^Ö�^û]æËˆUé躠®*}8Ù6ËEBfVØI†”iÖHS3”êZ#¬íušåØäyFéf€ñdF#ú½Ï?ÿuUðÔµ£aÐípîê÷Òöî.ËUL¿ß%/kv®ñäèˆ/¿øûW÷‘~ˆ}rFACVÕäµ¢2 à ºý§ã1­ µÖ¨$eQ“$Óé˜å|…ëÚ”uC¶µu}mð1„^…ú¾�Dë[išRºš©1%Y6ÒÚMQ]jfggg8®Ö&…©‹f»Ý6ý~Ÿ½�ív›G�ñÔSW/µ·óÑ);;×évÛ$E¹km­È2 !‰’˜A·…å:$YJšät»] oß¿G«ÓC˜Ú RÙ%e®»-³ò‚Ò«?ËÝn—ªÒ™´4M0¤âôäËGwbR)A­T©¨Ò”j¡iÔ½®¦ÃªuNp¼®4ÛÙÙY“•õ÷ÉÌJ”‚Z5dYA§úòV”X¶Íbž2Oi”AE�žã°=’§³q�#%½nÈÆF�³É)õŽÇr899c0ÜÔNI¡AˆºÓ nþ ¸àzƒmîß›ÕjÁã£Cn>}ƒ²Ì1M‹»wßä;¿óãÔµº|Cì_aww—ããcâ8fcc“üÁäcûŸþô§9;;#ËrÞ|ó.ív›4ÉX.—€�ëzœžž±\D”EчÚ&œe† Ï3‹Û[›Ü¼y“º®9¸²¯óeÅööç£ £ÑX¯P¤¾h0Y£Eð2ÔZ¤6ˆ¢%i#M×q‘Ò¤©*‚ ¤.KT­<ŸóÓ}ãËZ­¶í¬­²õÚêj�n›<ÏIÓ„<×ôK˶(Šü2´ê8:Aí­Sô.­(Šp]÷2å~ᦊ¢H÷�­6Q´Â0%¾ Mk­9-`]‹Ñ”¬Åæf}™øž�c[ºuaíð«•nfð|�°åc»6IºZ[1O±-�µ æYJ]*®\¹J§ÛF{ýÚ²4ÃóýW®ìEK-’®�UU¡j…ëû4J‡çÒL#,©?¬ŽëÐëv×E›©>¸×¥¡Bè†ÓÐ…±BZkw Ì5Â"Ž#TA+¤´¦À&išr~v²¦£tÚíK—˜ã¹ìqí©+œŸŸê c­­diÆr¹ Z¥ÄÉ’ó³úý>ªV8®‹m»œ��’&)y™sûÙwÑë÷ôz´;m�„—6†e¡ w…4-×GÕŠñdF–åkÊpE»Õ¢ÕnãºÖ:Õn ô$¾î©Ó%·õz•„a@·Û¹ù¡A!.j{tn¨ªö®‘¤9ižó¹?ú—ë©´À¡ïð®[7t;�Ï›¯¿Î_ý+ßCSÕÚ�á{dE�aJæË%~àÓßÚ@Úöç/°wpÀ*Ëyôä„G§'i³±½M¡?yŒo{˜¦…cë î*Šyëî=F£1­v‹F5ë÷fMše,fs6Nµå}{£O^dD«˜¢,q<�8I¸wÿ>Qœ -ÉÖÎFcprr¢1è¦@ hˆW z�ÛHË`¹˜ñîw?Çt:cwgŸº†Á`“²¬ÉËBOÃFƒBQ•zíÛ èu;8¶¤)Ë5ÄÒ%N2æ‹¿RÕŠÓÓ3F£s0:í–î”Ì ²¼b4š1ÏY¬Ò8&É3 i0™O)Ë„n½È‹ aH ,­uÙ6Q£j=åÕeÉÑ£'<::B {m[·o¬bÝrO«(âèÑcò¼¦( T#±ÝÓÙ’óÑ Ûó(ËjÝ<^`JhT�eB¯¶<\Ï¥Ýí" ©q+žÏr¹d°1ÄQóƯ3],P4,æýî¿^·=€¾û“ßË­[·x÷»oó©¿þ×0…àôä˜ÙtÁ½{÷¨JÅÍ›·øîïþ?ü7ÿ¾ç{¿w}x<äáC}€üÀüÛäÙú'míP2†ib“ZÕ\½rÛuè´»ôz:Yßî´û ‡}öèö»dyŠjj”Ò”VKšDËÅ%{È4LÌuÆ&KSê2§.+žzꀧ®?ESé&t !|óî]²,£´ôJÑЕ$IšQ+…�’JÕHÛ¡ªÕe7X¯ÛÃr]ò¢ NóÐ`Ð …Às,KP•E®/( Ò³¤E„¾‡AC–h{x£”h¯1M]¯«xžà¸>RêãþýG¤Y†0UY²·³E¿ß^�ò$!MRÞ}ûݺgnv»äEέgžáäüŒ·ïß#ŠΦSNÆ#JÕ0žÏ)ê†þæ&Òu99;'ËR’¥ÆÔKËÂv\вâü|DšeëXƒKY•Âd¾X XÅ1u]’$+º�Ë4ð<¥T“錷޾G–ììî²»¿OY•¨¦!Éb­£9Ž-QUÁ ß¦äEB£*¶¶6 ÃU¥ 6hw::t™F˜Ò ¨Š5Ê [ CLaP•½N›V§…èuùÙdBQÔ¤EI”DÔëÏtšçœžŸk&˜!˜N—Ÿœ’ç–ë#,I–g`4”UE^¬V iZ"¥ƒe¹Ô5k·¯Ž)8¨²æü\çÖj¥ß†))ŠÃUÅj1͈¢‚ýî€íÝÂ0\ß^õúèüü aB¿ÛÓ+ß\£Ò}¯}‰.»ì²,Ó¤^µnönÔe~¨it· gYí.µjX¬fœœœè5g–#¤I«ía5§ÇOØßó|í+_eÐïsvz ï}BZÝ«8âÖÍüê¯ÿQ´äû>õ×xýõ×1¤nyou;t˧Òê )*Eþè„�a˜kÃbÝÛh¡0Òb%T•¶ò»ë5dØÖŸk/ð±…Ïd2a6©ØÝÙG:.Y’p|ú„ª©¸ýÜ»è6ðCŸ$IØÝÝ&Š–(òx‰cv¸uã:WvØÚÚ Ë#T]pÿþC®_¿Î“Çg„-)=–‹5Ñë²¼*×AÇ4±]›:[Q7i¢qõaØboï€/¿øU‘d)�ïâÚ‚�­-ü0 ÉR–«„Ñäe(ÜÀÕ É\/*T]‘§Ð8 �RDqIUÄ$iÄh4Â÷m,áPsÔÚý躺d¸×è÷�ÐyašL�OÉÒŠ ìpr6#ÎVœ2�æËÉ|¦‰aI°µ[ײµRdE�-’†Ù<"ÏJ–O”Fzå_–¢Áö,¶v¶)Š’Ó“1Qò¯’²¿Ý×·�€þ“¿ów‡˜Bpãúu¤)8zü˜4ˉ“”i0ø>ûY~é—~™?üÃÏñæ›wéöú¼|çÇa:›qïþ}666xúæMn=ó RZœ���Ò"Ë3ÎÏ'úf�¡×*ÓÄBNø@CQdY <ß[‡M5|Ìv,[RV¥þ�‰†²*™LÆ”EAž§ ò<[w³A¯×Å2-zÝM”zá[ IDAT­ô{Ø–D CÓ#˵XGü?í�wxTUúÇ?s§gÒ R% ]DÊDqAÀņâ‚Âb[X˺®îOWV@° *¢kAA)+½J$�PBz&ÓïýýqgH!RÁóyžóL¹sÊ}ß¹÷{Ϲç¾G§ÓzG Ãd2��Ëåv»¼««0›Õ«xum7V« ·Ûãí*«Ãcz½�N�ÑhB§S§‡ûQs»=äçàñÈ;’F‰Õ†Ëã¡°°—ËM€9‹%�°°pJl%êÃ{n5`¢Û@PšÑ`µ•àr«Wà:½ƒÁ„Þ`PÓëØ½k'N§ƒÖ­¢Q<2 ññ8lŒ=-"[Ð,<œÂüÎeŸY¡° _½âö(h4 �K`ÖâBÌfDGGc2@£Áét ãA+ih†Ù¤Þ»‘4Y!80P]�TVÿj/Ï€VÒàrÉXь갑ÅGVÐêõ˜ÌfôF‹ºŸ"£ÈŠúÌ�Q²¼½Æ‚‚|²Nž ??­NK`P Ö’rsrq:ܸœ.t:‡­VB‹†ˆˆf„‡…àrØQ<š…‡‚ËãB'i)(Ì'88IÒqæôioOÔ�Ía£¨°ˆ³gO“™uB}ÆÇ ÇZ\¡£idffR\¢ ‡¬@pH(£�¢àv»�4ê튬!Õé}ñ¹,êùn·þßãV'Ð8(² j0XI£EƒN«Cg0b %$¼{÷ìÇé’Q4šGEb0艌lF‰µˆ.]’±˜9y"“‚ü<ÆŽƒµ¸�,Õ* ‡ÃNFF'2°PTT¨ó¹Z WÅÛlÆ`2`  °°€¢¢B‚ ÁhÐ iÕã² °øü0¢Ýá$¿ �› »Ãé½ÿ¢Þ'•$ !A�HÈäççc4 iÕ{[6»�¤%))�VÉ“Yœ:} �¤¡¨¨»÷¹®fá!õ’-&ŒF‹:ô”””Ì©¬Ó=z £ÉŒ"+ää©‹ºœŒj„ŠÂbuyPP\N²â&¼Y3 ‹‹Ø¹{/¡ÄnW– ² Ñ(„†† 7è±Ù�äçç“““ç�v®Š&‹·ìÁã­N�NgDQ´8�ŠŠläæå‘_�‡ÛåÄåt“““CQA(`6Ý�A ,¬Ó©‘¬4œ:u‡Ó©Žèô¼¡¾ÔÇB HN�:ÉY]�60Ђ"{°ât¨Cìn—ŒV2ãðöМN'Á!�Z0™�Þ¥Pìht:²Nec+(!6¦Uµz@U.ǰ`Á‚j«˜@ >Æ�_­å¤ª‹� þð7ÛÜÐDаhµÚó!V@ø£±þhZ4-*ú£:T)@²¬®csüøq ý®í#¨{ÔXsÁÄÇÇ üш4-„?š•ù£:T)@N§“ŒŒ éܹóùiÁ‚†A–eöìÙCZZ Â�ˆðGÓBø£iQ™?ªC•^’euÖ‰pfã I]ºt!77÷ü ;á�ÆCø£i!üÑ´¨è�êâ÷PÙ" OÙÌ@ø£±ñç�]™ß‘ž³S v*¨74‰6=èÚz°8>šýQª¿x·@ ¨’ã9;øCÛ»�4â�ªO<Š‹MG—еõàÆnŠ hУÅápðë–_9ž™É¹³gˆˆŒ">&†Þ×ôVŸêÔÂþõ‡¢È &>ç~ú…#3þ @»¿?CÄ�×ò]Pìùí©E ÒŽÆ@«Ñ£Ô Ø¥ iÓ`”v,�åß® uÛ®tîÞ—¨0u¦Ä™¼bާgò΂yÜzËÚTÿ– úû_þlßÅáiÿÀž–Nç!·°wÂã˜âcøuòDn6œ¯¾þ‚ÔFn§@P]ª%@µ�Ò˜‘™Î÷?üÀu7 E§×³+ÃÆÖÌ4@€AK§¶íIhÏ÷?|Çà�iߦVõ])ø‚•V¤¦þö¯.æ�úšúk=œÆ‘¿½Bþ¯[é88•ø»î†sçpïÚÅu!¡ì9p„¤f´mMtëèßÅd_,Ū¶]®bx×—´n âšþÐnUþðG½ß±s8,[¾œ¾×§r²@aóq;aÁü²%�u[Ò´ÙrÜÎÉ…¾×§²üÛ8³;ùÁ�„‡‡—O�§±Ó^ß{P韌§w«pÂ#»3jÖ~´úK *ûÇ6":"ð2³¿o§2Yù÷QôŽWÛÑ<±?æn%¯Z#3nÎüüëÏÔpñúFÀ~ê4¿MzŠÍ†¡7“:}q±±d}ø!«Þxƒ5kÖ�SRB»ðpšïÛϺ= Zû3{ÇOÁ~êtiAÎÃüûúþ<ñ«­ô;Ç^M©ð� n�óÙþÞR;·T�“–�üÌj²Åü” ¨wÚºm+Ñ ]@Òs"ßC\„…ÏVíaÑ´Á|4m0Ÿ­ÚCX ž£Ù.�ô´nÛ•Í[7_PNô¸ïÉÊÊRÓ‰]Ì¿¹9íFŒ ƒ©¾÷ ,zâÆÌfÞø8"G¼Íû�&Ó Õ_•Ù?Ȭ#À E¯Õ i4—‘ý¥˜_ŸʽKyè³=ddcËüaä½~;w¿w ×Åò;�óÙ ¯óãÙ¦/@{Ât6ŸÁÓ¦Ó®Mr>úˆµsç²íXއîÇñÐýl·•°37—kèCó}p~ÿ{hìæÿNqpè­‘ ™¾�ž_ÉÞ´cì_;—)·v&´ú~7Ô»ËÈ$>.†íéVb#X¸|gù©“2ü÷‡½›uìH·ÃñÌÌJZª.Ç`2qîœÉßwâ_éN2y›ÿÃØ^q4oEÛë'òá�Ôül+\Å�ÉCyíŸ÷rSï.´k÷þ¼ð{Þ™0ˆ>Ý;ße8oì(æ¢�ùÂUÜ™4ˆ¿M»‹zw'±mÆÌÝGI¨Ìþ ¾ÞÎü¥ÛY¸|‹Wì¯äþÄkÙ»à?<Ð+š@Sñ×=Â[¯÷ã·ÿÌc¯”s_�›Êç¼¹ó–1$vŸžÊbùãcyiÇfÿ±+]‡¿_Ÿ¦¯5®ü:µmKÑâÅl\ô!›¢dôHôïÌ"ø¦þ€qÞlcF±97—ãÙÙôÕéèÕª®¢âÔ$S°õ=¾¡Iq=¹ææé,9dWm_ô3ôÏœ×gø�ƒéÕížüd §ü‰Ô~7Ò£ÏÃÌÝUêï‚Íó¸¿_oãû0pÂ'ìo*BCQ¸‘½q€kgÌ ·w§UhQ‰×rK¿è]é,y´?I-›ÞŠ«FÏa·UA=NÞd\ïXÂÃÉê1‘Õ¹^»)vλ›«cšÞ²[™s‹LÞÿ^ãÎîÑDD´æš{æ±ÇzùÙºÞ(ûìi¢Â)°¹Yôí.>|v0 Ÿ)�BùÉŒT>ýÛÍ,]û§ œD…žŸ¡U)ö½ÌybÉ/LãÚP Jáz¦ß;�à9™}œ•œã÷ü[=ùÙ ç¬çkÓS,ÿu_kÍÒ©³éÖElع›åc2xã…ÕäTçrîV¾|šÿÛÉ®¯GpøÕX—ß4þ UÙѳjôr³¿#}=û¥îÜÒ±l¸‰°ž·��³‘íÙ~z6R ný×lÆD'ðÈ7»ÙýÅ}—l׆bó’%¬?p€¢!7ðÁ|Bî¸�æ-ZBHHÍ[´ lÄíX½‡uè6œ:ÅŽ³gkT‡R´…—ÿ¼˜ ¿~ÉžcëùôOy¼1a>¼#±rîVšþÌ'?­äÛ´dåÓÓØšú+6|Ç'wf1÷•_ÈS@)ÞÊ?'}FØôoØ{p1÷ä¾ÍcóÒêÁ*M{Ú6;{qï�Q®u£‹ û°çøæÐY²�,¦ÿîWøûÚ|ä‚u<3n6ò¤•¤ee°}ñô ñÞO±a•í~V¤�åè’�ìù§znQŠ60ãþ÷i+Y'Ö0!çšs�ê¯ÄÓ4h°§¶\n«½ê“ƒÓ%£½hk\[ô?ÎËl�°íý„ Ø00ƒd¦Ã“HÉûš¯Ž8ünÀ˜À�Ô¶˜�íØ‹˜ «¹ëº(´˜ˆëÝýÙtòª3RcL`ذd,0Å÷¡ƒö4Çó›Ö€ï•bOI.vS�îÉj-Í ÔXÉ.nZv¯ aWwc‡vX>XÀ�oÌ$å†ôìÑ‹NI�IêЃ^]G*44”¨Ö­ ¿ïÂ>^Èþí»º[ùÂ<9,½3…Žm{ª)ù.d¨–öß–ò³aãúG¡—L´½íOôÎ_ÅŠ4ï2߯Xn‹‰�¤nDvaX¿´iݳ úì“ä{À¾oëô7qOÿHôÆxRÇÄsâ» ‡s¯d<ŧ±YZѬ²'4\Oû -Ú𫜬%ûTE{ó“áÙ‰PS щ ûÔËÇÈû¯£…^KØU·ÐYwŠãùl{³Z?”‡oj‰ÁÔž¡÷´'cù/\·6ËqÑ©.—«VÑe#""É.°ÛÌŒ§G[n›¾€¥/©ÓH‡ÍXŽ¢Àõ½ÚßÜĹ+Í""+½î9»”g^ËgìâQ´’8`Í>Aq@&·ú9€HségK°U½ÍÑÂ…¬5¬uãp€Ó ’ɂΣþÖåÖ ÉœvŽr7·�¸< ŠÇ‰Óá@ë,_.7h<8vý%Û ¨4ªlMýQ•ýËNX¹œìïчb´§“WâÀQÆ<ž¼S)„<8œ.dd\N‡ÎÒÏN'EÁírªÛj€?ȲºBi]rÕª/Ø<û®IPg%¾´´thtúm1èuÖü³g¹<ýŸÙÊÆÔ�ÜþȽ¥íq¹ñhÃðæ|¦õPWTÅq„¹w¿ˆÍíÂVp«¹² — Phn.æÄ9;®(²d"X§îŸË£A2`ðþÖ#kÐÈ.\N¶œ,rOlct—/ÑŠÇm¯­s»È²ì]4°öÇG]ãчb(I'§Âÿç ¾{ý9f}§QOá�"‚8)9—…ÕÒ‘ßqrþ÷.d�…pƒºà .7’$ãpرžÍà\æFnNøÐ»üº¥ýMÙ8 ¸Ãe¨Il _œ¥K%6º™™'èÑ¡9V©)I¬Þt¨´’ÄÀ~‰(ŠÂUqp 7'è1úÙæ;�|'"EU•Ò:EåÂ}R¼7}'βåT<ÁÕ6ÕÖ•Ù?ج#Ȭ'8@¯¾^FöWBR˜2Ȩ̂<ÍÇÛOQl+$cÃ;L}z3É“î#Y/£›g:ÆÊ §q8sØúÑ"öÛ¼ua$ÔPÈñ,+�»Îü¡”¹ ©Ë ×—^ÒúÄGý^ sp$æàÈrß]ðŸU�]æ;E� ¤ÈÿÈ ò�,\}»ÛÆÑeókÀµô�×{/ÊüŸ½¥ÿoÎûÍ�4„?ØV0Å œN¬gްë`~�Û¤¬­ëú|Uë¶…¤0e”…¯y”·N#Ïf£ðÔAvÌÁ–_€+ ÍJ-eÑŽ"YƘ<‚~ޝ™ýÕ %œ>´�Svù‚c¤ì¹Å˜|'7”ü—YK÷“ïpP|j?Ûöçâjäý¯)õ.@:­Žú³î§•„=\ÛÁB›æ&º½;nïN›æFú¶ Ì$óãªo å…¿¿À¡C‡Ê•sxÙRÒr~ä/)ILLTSò}¬ñôäÙ·Àöh×�?¾È_æN¥³^Fð³MV¯.Ê�Tq`•&'éK¦òÈ ²—NeÂÜØ.(Gu‚"×Í ©¶þ¨Êþ‘!z"ƒõ—™ýedÅL�g>eÎÐæŽîIb»dR&.%dòGÌÝ­,#»1éÉö?v ‰yÍy;·ÄèÔ«x]wÜÓ‰_ïëBòзêÌ€÷ê´n”ŠÊôÛbÎ'õ{U˜‚#Iücp¹ï*+ç‚ò}ßYº1õ?£°ÏMÏä»ÐÂóÆÓÑPyÞrŸñž$¯æ¯sþ„2o<ý:¥Ð{ÀS|¸»¨^lRWÇG�'ÅL�g–ðÎ(‹¼–ÎíÚ‘Üw4¯ü”Kø Ç­›É�í’Hyò ×�êˆI‘Q‚úñœqØfÞBÇ„öô¹÷=X=•#¥ç%°ÏÍù­Ûè”�@bÊxæí,ÀÓÈû_S*ë3éSRRœo¾ù&Û¶mcäÈ‘—TpENf�à§µk騥q±1YÔ¡€"«�ŒÌìܾ ·ÛI·nÝÐi |þùg<øÀ„­-q¥!IŸ}öW_}5@­ü!ì_{üùcõáÿгõ�u^ç’�¾fÌè±ê�ªÑ”yÕ€>{<Ž;GßON±Ìšo>`ôÌ|°ð}FÝ=¬ÎÛÒTØzâsnj?¥N�Aí)ë�É“'³~ýúဠ(ñ&k™÷6À^ï÷€|´lÑŠÃG°oß^þ·égÎe«SE›7�$*2Š;† çoÏM'?·€ �@n:Œ?ZÈߦ?Wëºë’¶mÛ–û|ôèÑ­ÿRýq¥Ú¿2Ò'{@õ�^¯?/8e_}Cî:ƒ™¨pïouú ÚÒ£SŠßò·ï[_/í®Oª:êê|%hL€tZݺv§[Û'>ü³ßz“Vž–œ9{†Â‚&÷g:|øp¹Ï Ý¾ÚøãJ´e4d›}þP”ú©×b `á‡T¹Ý,^8çüçùïÎÃb (×–­{~ö[GSóñÅðgk!@— *@£M›6<2q2}ò!kÖüȈá¢;]‘úô‡°Í)õ‡R/¶|ë�þ0jH•íºr©ÚÖB€./š”ÄÅÅ1í™åê”Rßþö¯¥þÐà‘]bAºzFVÜh�„]!49øGø£iáóGKKGöœY�‚ðM}¢A¢UPg!@W~H£Ñàñx®œõ5.CÊ>Ü%üÑøTå�ø�¾Ä‡ômÄ–ý¾ð‰Œ8>š5}µJ’$‰°°0Ž=Z­™G‚ºçÈ‘#„……!IêãZÂ�‹ðGÓBø£iQÑÕ¡J2 ÄÄÄ�žžÎáÇÅUE£Ñh !>>ƒA}¸Pø£ñþhZ4-*óGuðÛ²X,tèСQƒûýžÑjµètºóWÂ�‹ðGÓBø£iQÑÕÁï= ­V{INõƒðGÓBø£i!üqùÑ`ë �@P¿= YV×Ó�@àI’Ðëõu3'Ë2ùùùüüóÏdee A¥H’D«V­œ¤õWnéKttÝþ8�']-ó‡O䚸¾ücŸÃ·3žym™}ñ¥a|�£\¤]í’ůŽãº¤X¢£ÛsûÇ'ñø­»6ùüØÙ?½ÄíÝZOŸ{ÞbG‘ˆ³%jO��œ·Ž—_ÞApHé¤:�ÛŠáÚçøv¿}ʈ“ÿfòÜC8+föpÊÑžÉ+�––FZÚa>¸1HÝ”·Ÿ=š[™½ñéû>dð¾—xüó¸çþ9<üz÷|}�Œ£«xÜò.þ¿�Ø.’OÉ]Í´g×Ówþn2Ò·1«ëjþúüzŠ.Rfù6çðóKÃùnÑaeg|èi÷èï~¤‘–v”] §Ur:kü¶«PÜ%X¥–tk‚VNb×H(¶ã¹H™åÐЪ×dú8Ý-åg|h´zï~1ê‹ùõýõDß;œ6zÿí*gÒÜuÌüºO¾ú½¢Œh€óKüÔ}Éùª´ Ø~û’ �#˜00£9�ÛIÅõÝ2Wèx AM©¥)oû73¶ßÂ+¶GòT64ã¦`ÿRÞZƒFu" âfO E¹[˜zUk¢£I÷:¿œ«$š­;›];ì´ïƒ 1É]ÆÚL'Š+‡˾åàÉ#œ®xi^.H72iP/Nù7_ü÷ÿ˜ü†‡±�§R“21Ónp*I�üE}wŸ\ÎÜ=�yðæ–\03¾B»ÊbO[Ë¡€Ž¿r½:w¤Gê°¢\¤îKÍWµMd¬'Ò(‰èH”^ý­¡eg"r÷pRt�A-©�•ìfö³ëéÿÊ#t ¨ä„¸ãyúÅÆÑñ¦é4ƒÉ½C¸`†xÈ@Þß±—ƒÇ3IÛ±ˆ±Îù<øÄwœ+w»ÈÅɯŸc–} OÝ�˜»=ÉÌq%¼>¸#®É‚‚¶D%ÊOA¿0R(=F %bË|^š6›ƒ]ÆpGÇ@4Õ.³º89üÉ{d]÷×5«hæJÚUw^§�o!oð[ü²{‹Gžä•‰ 8|A÷±nòUm‡Õ 3¯ $CzÅŽÕ)î ‚ÚQrðÛ«ýi­N*¸ó‹ öÍ{–U}þÁ”«, `ºêy6dœ mç¹;{:C§®&÷‚y¦°0tÆÈ^ÜûÔíî\Å‘óWØ2›^aÜË&ÏŸJW³÷km8ý[Ä/¿áðî™9lÑ43øÏçJ_Äø‰¿pËg[غë^°Ìá®É+8ë©N™5 x >w3ôþž•ÛPÅþ”A‘eLI÷2q`,FÉLâ÷‘|j { üŸô/5_Õ6‘0™Ð8møôFv–àÒ˜°.I•�à<5 íþ˜u7²qãjæÜ�Ãçïäà{#éG\ò|~ê¯ÜÐ�±ßœ£ô”§Áؼ+Ãî»ÍÖŸH¿`Bdè¼WÜ ¶ïòà#›<.ãªRi«7P’ÔŸ¶&ùŠv/ã·øÓ5­)ž[Ÿ˜@ÔÆ%ì-¹X™5A&gÝÛü2†»;–Í\½ý1D¶'¬ä$yÞ‘HÅåÀ�þü½±ª¸´|þl¢ÁÓ� s¿qÆë7ç齜 M¢…±:v‚ª©�iЇ´$6.ޏ¸"Ã;óøŠ-lÙ¼‰M›6±iÍ<†D&0qÉw¼yS¹;×±5½7à.<ÀŠÖPÒî¢  nâÕ&ñÞa'®¬õ|¿9ƒ"�‚;o‹g®À“r+íMà:ù5��{—Èoñp’D‰ÕŠµÄ‰Ú‰Rp»< ØÉüᦼçaøÔþDHþòi0·l�åøJÖf8Päb~¿‚Ìæ]ieô_&žbN¥Ÿ ßU�¡'÷I–¿½�„î ^_úµ¿ý)kSòHnÖ|Á«‹`u²óãùJ¸™®Aþ{—–Ï¿MÌÉwp½ý ÞY�…ÃvŒe³¾E¾^õ�@ Ô¿ëùE£'(²UéðRI&ZÁQ-ifÖ�u|)ÓÆ�coŽ´¡tp?sgÞJ¤ÛIvlØDë<7è�óå“ã¹ÿHhÂè4ì1Þ±/A7é+f±ìd&LêÇW¾zBïäË-3ém:Ë—wý�©ÿsÛ�»ßøŒ§û¡ÁM–¿|Wý•Ù÷ý…'¶eŠUCHÒPžzk"‰@®ªLp]ÀÈÔU<ôË7ü)Ú°=ç‘OYp¼'Ϥ–�|à¿]=ËÚ¤}Wž˜ÿO>2ŒÓ‹ î8’çÝMœ¾ÒêJ1]Z>³?›z3mÖ]L˜Ø›„³¢R&3çéžX.Ò�@ ¸•]ëSRRœ³fÍâÝwßeúôéDEE5xÚùß�¥ßÌùvùxâ.]¶�àŠåÑGeÆŒ >œõë×l@‰7Y˼·vЧZØIÿß:ß;„ÖB|� N§Ója¢Ûó«YÒØÍ‚+ÑA£àW€$IB¶5HÎIDAT–+ *A<’$¡ø S�*H’$bccÙ¾};O%¡q�@ @Ÿ5kÖЦM›éE•÷€t: à‡~`ÕªU¢'$‚J‘$‰˜˜† †ÍvÁúUR¥iµZ‚ƒƒ;v,Z­¶Fë| �à÷ƒ¢(x<ìv;.×Å‚O–R¥egg×IÃ�@ ¨Œ*èìÙ³ Ù�@ üÎ$‚F¡Júøã�²�@ ¸²p��ð²7)ÞTi,8`L€¹Ì«ï½É»ýb¡1�@ðûÄ8»7Ù¼É^æÕQUHAU*ªz¹-¥‚¥x¿� "nTrNJ{C¾ž�•ÁùºG²7ƒÖ›¹¬øxªÈ+�¯ãâD¡²Ãqç‡áª_ïÇCåâã&�@ *âÓ_òõ‚|º"Cõz@•‰� ÈT •ãÓ_º¤PYñ){OHB�@ *Ç7ãͧe_kÔò½×R^|Dl�@ T†O7Ê QÙW¿= …òóµ5”öˆÊ&�@ *¢TH2êJ•"¢©æ«@ •¡\ìõÿÏ�/�éÊõIEND®B`‚osm-gps-map-1.2.2/website/screenshot.png000066400000000000000000002355661526276210300202260ustar00rootroot00000000000000‰PNG  IHDR¤¶0Rò¥sBIT|dˆtEXtSoftwaregnome-screenshotï¿> IDATxœì�wœTåõÿßwzÛ2³ ËÂ.,ÍEŠJ5±ûScì%ÖhÔØ•ÄØR,Q“(X5ÅF,±Äþµ¢X(‰¨ ,m ÛûÌNŸùýñÜ;sï�;Ë. ´ùðÚײwÎÜûÜÏ=Ï9Ï9Ïyž 9ä�C9ä�C9ä�C9ä�C9ä�C9ä�C9ä …´•ã[û�C9ä�CýArk¿-_’n˜Hâ;mV9ä�C{î[…á|’@B÷; `ä�¸ë<�Lâ $ ZÖ@o«VN2�£ŠÆjåãah[¡N­¼É®b(!ΩÈGüоAüVÃlƒ¼¡�W˜Òßém…Î:ˆöêäíPX®"À,ËKào„ÎM¢]jX�à 6�êütT‹ï$âZy›Š÷íJqc‚¶µh†dR+ïôBÑ>Ú{MÄ }=ô¶eréô‰ö¨åc!ÁM—fÈ+…¼aiyÉÁNè¬1æ2xk¹ô7CW�¸ŽøF�=_È*ß骃îHDuܸÁ7¬•¼IÜ«¿ ’ºaŽ=Š+…NhôìÛ,ÜxÁ7FËÍÓ3;ä—‚G§g�q¿Ñ`&7ÃÁåE£gÝ[ »â‘Ln¼£Äo5—í!Д©gö<(#Ú¥Ö³V™› =+ò=‹BëZc½qíWëM$më2¹1YenJeY¥¶ =Ó÷A‹òËÀ­ïƒM²žôAïÈL=묅žÑ_4\zD±:µzÖ¶V<¯ =+€â±™zÖô5„º´²’Iè�wd¦žµVA¸'“Ï`((K?#Éán¡—FÜä Ï t»%IØŽNƒ>huBA¹° jûÔ]Ý›!®ëƒö<( 6—–˶uh…¤NÏ…¢�kì™Íß@°ƒtì"Ã=8“›Dš×@DÏ�EÖ³r¸å)q9„JqÝïÙ"$³5} ™ʧwFŠœ·B+Ÿˆ Y}G@’ fÕ•ca!¯ï Œ�g�¸9Ñ€P<ýÃF÷ ñµ|Ä/äõ΄�¶yD'Uê�^o$$I8‹b$d[厠{x’I<<õ½&lË4¸ ”µp¸V>…Þ.[x†è¸ ù .%pùÀ]œÉMoKfG@ÆÙž§å&Ü-[ïŒ$I8›SÇM›Ü™òÞ‘rG�ÀɤÐ#nÌ6Á½ú^ûÔ3×ôL:ãdÀMk¦3’d=séô,Ü-äõÎH’„žÙÝ ©¸ ¶ ~2ôÌ$ë™3Í ˆçÔÛn gfðUdêYÀHo$qÞ‚2�ž……c4êƒö<¡ jùh¯h�¾J’ ºŠt\öÈzΔ÷”g”Ñ[3�‘dN›K«g½­27z=3�Ï@ÏüM™ÎDß6êƒþ¦Lg¢ùCµ÷ f·OÎBðôÁ@kf”ÔöLÍM—è#zg$™Tz¦â&Ð"œ‹Þ™Ìâ^-­žùe½Ñé™ÉÞ™zæoÊtF ÷A­ž9(¦ú-É¿“€”5BJ(6)n¤}C¦Œd’ ¢C+ @W}¦¼Å.”ÏdSÉ'DGö7fÊÛÜbd YTòqñð‚ڑέ|2!FYFÊä*� I%—G*ÎË3D(`’´â'cÐ^�i$���Ù®å&#?=ÌV¹ÓÛuÜôˆQ·V§l@­Zù`‡±A·çer™Œ‹èȨc:½"òŤ’�‰¶Ä‚™òîcn:k3�ˆQ¢Å)xKÊ{"&"=$ä Éä²O=<0=spÓÛ*�up âçÆßhlÐ]ÅbГ”´Ütm‚X$S>oˆx¾)nvdѳ‚2ݽ&…qëÚ”yn³UDÕš>•€P7ô4eÊ[]BÏô}J´éa/ÜH&=ëΔwú„3ÒôÁ˜è³ƒ$D±êô,}ÖHÏò‡�Ŧճx:j2eƒ®ïS?ôôA‹C´'ƒ›.a¤õ°yD$‹Y{¯�fã§Ã+t­¿zæ.6à&"GRz–?LôµžÅ#‚K½cGŒkô&)kF}Ðlz,©î!ÅD!U‹�Jãe��’±´hg­ñ Y�‚„¤j“ˆ ŒF6v�PVµ|4=©1“YD»[+ê†"ÃÛ[…µ:µò½mâ;z‚Í6ygÖÊ÷4Š6éG‡f'µò�µr䥓·ºDšQ-›Lˆ”EÆÈFÊêòiåc!ð¤,$³èÄŽ|­¼ êåMfÁ»ÍeÀMGn|rGVÉû›„Q×E‹]è�$iå»6eF ž‘g0W];)Ò?zn@8 C=«Ï¢gy™zɦg¡gzn”Q¨7NŸÜ‘Uò�fc=³Ø—&“V¾{‹Ì�^oä�†¡žE2åmn¡—=‹Ën”A›¦…ÁÍèS!ïÈÓʇ{„ƒÉàÆ*ÎmÔƒzfQ¸ÔëY£¸F†ž9DÐHÏŒIŠ3M*³ˆß3¹A2Ö›xTÜlö)£Êz¦¿W“Ì�MÇM°3ÙEãà�A8áHAÈ÷C^ NW:²Óscu.Õzì…ºµÐÓ aù˜Ý,~¼rm{:ª�û #$Ô¬…žqN» ¬IðXÀ*GqÊ4ŽC§gˆ)J¦3JÈg��”‡öƒ¿%ós“EäS²òï`—ñ¨Ò*�&”Q Èé¨Naä4�D:ÊY¤“‹4G†‘“ÓQö<­|,$œ—Q:Ê=H´I- Èi‚x¦|Á0áÔòá9¥O¡Hà5 Ë•K1»!¹°’Ðâµ)y=LV1šP8ц`‡q$hs ­–�G…|—ˆQ«£ “›¬\ C§á¦Wt£�‰’ÎQËGÆ©:�õFRÉ'!”�³�WŸ;™¼q£8;½žr#!—OÇM6=CÖ3�Ž› àÆ(ªv†TÃ�_œßÈ(æ—‰­–uÏI&‘r1䯠š-"ÊWË'b¢í9íédÐÛ²¤ö ÄOFl7Žv\Åò@@§7†z&‰>b²föA£�’Hí�Vϲqc2‹HSÃe\Ü«‘ÞX\ò@@ÍMD´Å��pF}0‚δ‡uÏ8m­â§®ÊËÀ5N kô,›7ÃÆ ™¼ÄbˆAG+$·@™<÷‚£T�d†€¾]–i•¦tDÀg‡B»<ï_bØ÷�ˆèHïŒÌˆžaQƒrgI§—$“è˜VGzT•L eíÞœ)o²ˆ‡a¶jå#=bd©‡Õ.Ff³J¾#ds¦ç:Ôò�f2åùBA$“V¾§Ñب¸äÈKI_*ò]u™F½r5_OàÆoë¸;éÀýû†Œ¾>‘êÛß™K‹]ËM4hö[lb§ç2ÜelЭNÁ¥ž›¬Î+OÎAKZy³AN•Úܲ\ ÓO;Èùò=ªõÒ],ô†DZïñìzæ$� û¥g…ÜÖ�g4Ps"¡gÞ ¡è™Á Êj\ê¹ u-›Gð£ç&Ð, i7…Æ\ö4f1ÐrŸRëY"."#=ó ÎäF‰3¹zi¶èô¬×¸ZlBïõ}0Ô-F7.ѯLº>ÕÛn¬g޹êõ¬)Ë@À &âÆE œ…ÅŽFÏâ1‘ŽÒC2Ƀ*]ŸŠ…DñŽf ¸}‚SuÛ•9D=¬.yHÇ�âz¡×àÔHÄ¡¶\V(uj?sÈ}P’1Xµ: ž‘Él\/ä&N�õ¬Þر7G¡»z+çKB[‚qØ·\×§Òºë@ëŒâhç’ÔS_º ÄÅÃÈ0Ð’PVw±¸ å'9h#ï­Eµ|,(Oޤ£lyBYÕòa¿xxé(“H_YíZùP—u¥!œBùÔò�VaTŒÒ®"ñµ|O“Ì�>­ âF3ØéÑU$‚cøYc§8¿†Ë°0F©=«[ܯZ^U¦ö<ÂXh¸é�!¡»W“YpcÑqÙÛ&§PŒ¸‘'\5ç�jï±W%¯¤P„¬™„d¡{‹qäe±p£è™QÚÓ69m�hà ŸЕEÏLrjÏæÖéY�¬gF髼Ln‚Ù¹QŠkÔòþYÏtzc–S{$uò�Æ)a%Mª–MDEŸ5Ô—p�š>À(µ§8_�žù�‹}Lr 9CϺĈ;#}¥ôA[ÿû Ó@ÏÍÆÎKá&­gâÇh*äHÐk g�ÜHBgôÜD=3У>îÑQGhëÎH�Þ¨ˆ¦RÜØÒÎDêë��‘gä$<#'eïhßéi4NÕù“ÐmñõÕ¾ö@¦­—áì€ °""3 ×ëõ!Ez�G•’$Â~Ô´òÄŸQôb²É¡-  •“qá,Â7j“�—Z>Šm4 µçË©:•|<"Ú’-ÚѧPbaaXŒˆ{�ìíõiƒ ˆòX…5ÑIÿm¾Á2/ÝχŸÞ|NøþéD»ã)nÂ="õ)np_6Ío.'Aö£çQ|Ê™8Š\@’dÏ7$¾¹…ЂjÌ—}‰Û—y�-W_CÞ]‹päAbÑÅÄŠ�­r ‰EÓ¨Ÿ»‹}4žÓîÇ{ÄqØ DÛb+n'òÉ¿HDÑIó8ì~ŠLË(íO˜'Qô§/q¨¯ý¶ríëÉŸ÷ ùù}õ<º‡Þ†ï ±Ðö‘W.&暃cÖõ˜ó8VÝIïŸÿ 3 Å}ñ‹MÿÖ<‡8qp ñ•wþð9¢þ$¡à4 ^JA¡ŽÿÐ7ÄœOøóÏSº ª$ßñ”Üð(Î}†CϧD<ŽtÜX`}r$�·jÀ>�bÕu⣮ƾïX¤ð7Ä>:ŸðÒÏ…Þtæa?Fû|âù„¼–î³qU§ ì3诋GožG|äm8&Œ…ö×ÿçb¢¶9¸f_O¡7Aì‹;izà„‚£‚Ë_¤ðÀ`r§9ŠýïÏ>G4˜Ìh{xøÕ¸'©ÚþßωEŸ5JÕ¹‹åèE݃ÐkÀ¥9‚.èÏžªËÓM%(ÑŽQ±�YpjÒžò /Ã>Ƀq}º<ý»×/ÒtE{Üf1g“Ê®$!Ô+¢(#Xó|YÏWS #<Â3¨K@³*+â1“ÕŽ¿v5‰¨h¸ÉjÇ3b‰HÝ7€hƒ·NÙÖ§#d;éÈ(†˜K2‘vHÙ#$£”ˆ$ r­ò„®òË::m2‹0ÞlÕÊG{åÐV?J´©Ro²l"&nȰDÓ!F+ÊD^J¾CÎãê'€]éu )ù¨p¼F){ž*M ’7š1µ¨¸Ñ\?$Vû-)�M¶³©¶–Úªfnygoú%’1yÔÚ,×<‚¼9Ë)™}<¶<Ý�Í­å˜÷ûÎsdCÌD$ À:ó!ÌyõÔ¬íçxœg}DmI�($å˜OY�ó°ÙX=íløß—Ô™Æà<ái_u%.¹”Vyvÿó`hklcpŸ÷"ßx}„†ßHÉÏ/ÂQd£ùë%,^¾šºÄxÌÃŽåOßXiËr�÷ÖŒ`“̇é�`«,#ÔígKm%sºöÁyÝ JNš�-?Ý6Ë¡Oc>þJê#éö祕qžð4ƒ¯¾’μ 4}›ŠÆ´×ŽR$e=éiŠ+´¿èÇØÏ]‰åì1ç[;æ‰w`;áXÖÅS>¶qS {_ÿwK¿ª#è‡yÆ3„8†�íVuX…ÿÚu�à�eæGl,ü+z–±ôÀRIÑMo gôDöÇ|’pF5-“¸©Û¦I{Zg>DÄ^OÝúN°�ÇrÜGl(¨ ¹$ƒç³É4ˈcùó7…´DE‰Áo�^°ÎzZ8#ŸÌÑy7bó Ž,“ÓYœù8*§×qd9ä,GC“~ò}æC$\º¶VК­zTiLulưªÎ™/8ã™}VI.÷7[´ö)2®84YT)^•½Qæžõ°ØDT­±OQáìÂ]¢€ÁhP»5$“Г3C*ûÔÒœ™õè×ùÐeàCíÀÚdµcvå‘7jLV;&«�¼Qûcvåa²9Rr‰4ËÅUQm`£DEêÈ(åŒ�ÿ0„Qta²„¶Ñì“�Êѧ ‚�}¤\t¡m4 žÑZ »[(«&­ G^FòŽ‚ÌJ¨Ë8…¢T¦IRfŠÆ¨:ÊdÊ­–ÕˆÄÖÓyï|ºRü™X~'çžr"W_ò+6ÄšíÄ‚~‰¤«H#®Áw€ˆ°ìö9vÖLθòš†^Bغ_¶§¯“üú~zî/ùÙÅ'óì“޹˜Çš¬Ä]ƒ}\>°™§Ï?•3~~7]t?›ûA7³Î9”v«ªÍáœ/`öOÅêÀF–Àûyû‰°ºé%n½æjîþõÉÜ{ÚþœÕë|PÛÀÆ{2ïñŠ ~ÅúH›rî®÷øõ ‡s葇qá_Wcý ¨mÛm—ßO=`Ÿ|3_t ¥±èìã³´êÍ|“°é‰#Xöuæµ×úC¤–Émy–Ÿ1�îøJÜ«}]ÿ¹”“¦Ç­Ë„RúÁ1<ßã"ßH÷o‡ðèÙ?ç–?þŽ×æ]Îã¯ Ëæ�z�ovRéYŠÿËNæù*-ÿ�.+Ѩ,$«É"ž±yô/È«�€(+þp"Çü¿c8ýÖ0X¥ ½ÎY¿ä¢ËÓ×Ùïÿ]̳ÝV’^íó¹ëúôóy¿ÁEOÜ*ô¬ÇARJ·Òƒ#Žº_¾”õù]àÜHìÑ!üCÅÑ?_ù½€çnÔ¦$ùõ=üôl]Û�¹˜§Z­Ä³¤ö$]ª.Ø."¤Œ>+; }Ú3ÐbœVÒ]úT]o›qªÎâÈœJP Œì�Í%Ò�úôz¨[í°Á ¶¿ˆ$ÀáѦ1ý¤~ŸO׳MTú©á¯]M"Ädw’7já˜ìNá þÚÕÙ€_ ¾ŒR¼}!k•]$R©µ×TBm=̲�VË'“"h´Álˬ^JÆ…s‰Œœ”‡­—õ@ÔÀ™ÚóäHMÕöDL„ÎFyeg¡gÉ™üíÃ3IÖ¯}—ðÂ?PýQ+¦„›±ê{tÖòà¤.|^NÙâµ¾û Ÿ¶·p]E5Ó% iÒ_e‡‘¥m…ûðŽçP®êSf ¯t¬â ·öÚwéÂe/`�|¬áƒ7YÙÌ ÿK‚ý0ÓÊÂ×V,\Ïy��@98 Gòè�`ÐÉóùÅ Çp•~è–?„D¯�ú¦æßQÇ?&wS¶¥*eþ7ÒtØcìÿ럤�~ãíT_÷{\c¦Ê£Âµ¼õiÆ}Íâ÷“ˆ 6 Q¿ô Ú?ÿÍ1\nÄQØG}RÇ‘QÛý…´ûZ(V}ÝY`Ð#ì66rî"¹PI% ‹>n‰èSo(öÉ`4`²‚«03µ NYlòÚ3U[”t¼2ï¥vHž‘“úL«D{ÚñW‹W8‘iÏÔ)Ûù¼ûf|>5Ÿ’X¼[½AûÝD4LÏÆ/SŽ Ò³ñËT OÝ–ˆß˜›¾Ðo‡dsi+Á@�0X§ŒÔU+ Î3YäÔ›Y+é•ç™ R{V§¶jdgÔ›)o±§·QË»²¯¯ÒW‚A–’pDÛ-v�ò™ š³xY!W e8¸ènÜ\Êu@…"H�c¼Ìq°¤¬šÄæP:�c¶š)qûì”�¬ªŒpÐÍ–^ @Ÿ½ü›4÷eÓ&øÆ–^®„)vuR*¥I�€`ëÓtÝ ïM<›Šñ£9j,ùãÇbÿC:VL‰>OoÎ䦧ÙO~^?0%!)©ÂôìmÛ4XÚªÌ7˜¶š u…4¸�ÊdX6À½tÃLuúq)—�€„…Ĥ»ñÍ:Ö½üžû¢×ô+™3k0HR܆º¿™­fJ½~|H$MZþ£°ª($:„·”r›§{9Æ&ÜÕÊùÔù¥ôu†zýxIõÖ17ÍMÿ¤èF3_v6£tÏgËM32*§¦›K¹ª†J*Ž Ž”vuÃLÍÓq”´}7î#�AÚ GÊ3ִݤm{K¢…bYÐ*‚ÉTI1Ônœª³¹3 t2i¼,DæF]q"jém'3û!gcôöIÉö葲g¦L{fT¾-Hí:!Ÿ_½¸u{áðÈ;Ilçùz ¸Ùúå�$¹úJÿ°Ã=Æ©:³UŽvÔш<:È(�S{6gf4ñ‡ÎVG¦‘‹…Åh%#t–«b̺‘V4(œ—ÑV#Ž<@7Ò äÈË Fß™/˪¶& ‡2' !‰�fLv'V¹0$þÍÉl8}4ço,L§7¬ bµ‹‰2 +ã˜uèj[ÖÀÐ3°zbl\¹5ýC�<šò×_Ú? Û„rq°þk z7,"Â4l˜èüøQ~]M‰ ,nÃ>_d#‡ç•k”ÚB2#§k*�%ô8“ß|�Wó1×4‹_¼<—ƒlûµîËû± œSÝ£%ÍIz$šÄ%Å1ËÕ‰:mÛUWSjÌ>†t0þõÔ."ÂAéö¯ª¦ÔV·�!Ó”ö'ˆÇ´üÁfI ™”!A^F8kÆ9|‚¸ÿð|ð_´ôð³c¯3>©Âÿ»¯�UÇb+OæÛY£ùy£ê;’Ä›—cÆrÜŒ!¬«^Kr¿‹pZµç6™Ó‘¡GMÙ»¯‘´LÂ4^ýœArU`ízœ}ž~�‚ÚçÓÛ½/¯~v ‡þß(m;¬Â™T|Ù, ]ßN�/erd4A¨½ÌQ‹½‡ó�ÐqdJ;S¥íX'aÖµ]�Rå§�v"½Â d¤ê”>‹V>Ô-ï„a�ÚsägÚ³P·qa“Ù&¯ËSÛ§˜Ú'y¬±OaÿÔs6<Ÿ]6V&‹˜›J&Àí„NU´¨Ì)i: •¾ÓGIv³qæikè—Cræ‹ßjc�§Þ”’º‘M4h¾™­éÅq)y9tŽ”tšmòú'Uô’LˆsÍ{Y�é‘“FÞ/”Je¿±¤jH©1JÕ9åmOÔçW 1Ü:YI cÞR“FÀþwòüçáêxÿcó0±�§GjåM[ çëKñMrqÐo>`ßæ-x— P÷<�~Öΰ"{Úi ¿ˆž;‘¨©« ÀGO}H“%@ÁúhûüRJô2ëÁ·˜ºj1ù–bl£€ÙºŒ W¼@›=±ÕA‘­ü*¼·ÿœÂ†eü¢£ g`µlfU£™ªh”W×Ã~ò=>%î±÷™%Úõÿkµm;¨j1…æb,#~€ÉºŒÕ?}�ÆÍóhûüçéö¯^L¡µëH!³áŠh“z‰ÖÔC¥|ígÏÃÑø(­/Ó¾/%) CŸ÷*ÅI4/'ưØÈ ·ý‚„{<3¼Ù¿3ü"æ>iÀ¿9@± Îô3vÈeÒÒæGè­¹šü ýf“:»qægœÚžß¿ë *û Cワä–eìÓÙ ^Ýó ›8Ú©Õ5³œyÚ &Dê[âD7i9Š˜Ç3æ-G{zD¿5Ž@ήX ú Î «¹‘ô}P–ϸI\ëìSQ¯#úÈ4>{^´mp屨ÆL$а‚OžzƒßT¢6ªkÿ„c±ï#d”ö¯…¼v-›¾•¯]V‰sÄnóT{¤¤ñàBû Ys3í/}@CÄDÅÑç‘ïøšwÿµ6CTéDÙø?° “"•¼Å&~’Ñ*Â;™/þ×D °'jøÏ]w²HÖçX0JÂ*÷©~\Ç×ù�/«èÈ—ŸO©þùho\2‰>bÒ M“1\IuÆ7j9òdrdVÍ…m�#³Mîƒèú`�qªÎbWíU§îƒÆ}ÐêÐÙ§xڞݫÕ)§êTòñ¨±=3™e{cÒÊÇ‚²=ÓÉç;úªsÎÉ^�֞ţbûýóé×ù$ȳˆ,•Ye‹½mû‘ñÞžT4¤ÌÓ3�E IDAT)Å{{H¨&ú•óm úüš$o­¢™7J Oo4÷"™åÑ�N>4ˆF$qóúy)e‘™Q¸g¶É@=²Qä³8ŒŒ¼oT8<#gjsÉmÖÍ{E Â~I‘ Þ¸ECʆ™ÿ¥õb÷nÇ{q(+’#ÁŽWIþi!w¬Á~‹8­ÅÎQyÚó›ÌrØúŠ1ïÍÇO–q}k>›bHƸ›ùmi3ûHÃRßIø×°è¯ÓðÌÂ3mNæ3Šk¸Ä•SO«þêñü÷ÉaÜÒS@u\’:ìçkalïZ.óp×FÑæa> ¼˜ÖŸåqϦJÞ‹Ayùj:ç½ÅÕ¥,ñ;h‰‹à±vsô :Ž·&¡óU’÷,äŽÕ=Úš9îjï~«:·šKÛjÆ.<žÏžÆ­-lŒ‰¶XŒwµ0Ö”nÿ²§†qkOZ¦Ð`’¯…Qˆu½Jâ–…ÜÖ4‚wÃòµ­Í̾>�WUòNÊË!¶î*ªOû#—W¦ƒ(§ ~º‚æMà×]6°A2Ö ާê_\²¹€Æd’"çT?™Ïã�N�à()�êRóÿ¯6'½¦Ó k¸ÔM9-ÅÈ‘šÏ4!™V2è¡JîÙ0œ7zär#¯8Úø¦º‹#‰:[–ð¯á³§a½g/úµ×1wüÿƒïñÏÝ󱩞OŠxYÏ� .¦{Nw~)8* ñª«Xwâ¹z‹ÌQYˆø¿+Xüè®n´�]p÷x¾úG?k+ Ù€£™]Ûš†íÞ!¼Ð£k»”~u‰¦†åh­Ÿ}6ýÜhl7°OÑ ñT‚É"÷Aݼy¸×ØÞ(Z½}ŠØ'I{Ó•Z`‹Á<|_êM2.s#Û3«YlßÓf08�ödߺÁg›*S¥¤³mfì�&9rTÖ©‘ˆ†5‘‘r>kæ|E¿`äO­7L$rù8y €=ýAyô‘%:²{Ò#?E^I_•UÛ=º­Ìä† FJjO/͒ڳ؅¼IåáS©=eµ:Ò…)ù¤ª¢G¿¦I.9W˜Hd‰Ž$¹D]Çe6n”’v=—ñˆ iäíÓüðRò ¡ú¡“ùå‚·y`HHl§2™™méÑ�ú^#½â;zdã&Ô#4ôܸґ¬š›l‘¦=9­”¾×¬z–�›¨ñ†œ&Ùi^§Âõ,!tÌhÑ’7�As—â*Hó?¯$DLµfpãT½ÇæSÖP|hŒÞõë�l£°Wîƒ ˆ|~/§_ù,û�Yž©äݹW¾¸Î o¼Í=!Í<¥2€´èî5… Ñˆ^ž«ÑÈ'åùƒÉwCnúH_Yìâ~MÎiš¶Ïyûmîö„ä9Ä4Œô,¡Šô¨ž9òŒíS°›Lç%O=蹉G³TáÙ³¤Ü –‰¨ûàÆ&è1È!Ï£JÒ÷jÄM¶"Rà²@©K֛Ξš· 8ŸÁÖF&3üe5Ü·ŠS€ Ð+ÿTÿ"–>Ã,§ ô9Û°ÁšEÞdÑÊ+e‘FÎË,¿,K-ŸˆÉÑHÞš)�oß/™Ó(¡‹^Œ ¨ÉœN+häƒòhÇ`RT?/Æ÷ªyè¹L&û–7âÒ0²3éÂte~$*§1 F‰F\Æ"²£ÖÁ”�K%Š5âRN/é'¤³�*Í–í׳¨Áº””ž™û©g¦­p“å^5� tÒHÞ"GøšŠ¨8±µеßäO�DZ¿å¿oÍçÁ¼O“£�“œ Ñž¾Ò©ŠÞ˜3¹1r¼’$Ú¢—WÍfœÞDê%n}ÐhÍ¢Y6ΙmÏÖ§²ôAÃl‰5‹ž6)òz½Qæª�æ™ ¹ŒO%dµO1ã>hÒéYÅ hí�Æ,iFåC¼Pœ—¾F´×˜›²|èNˆÈ&[jZ’äÍPå)“’fTÉ(Î¥®,›¿êÎWä„KæquÊvkÈê�Ô§Š3‹ºÑHE2g†ªÊˆÞ¨p@Qn}è (“Ê@ëCçlòKfÉeBžË2z@»\ŪK¥ @Žtt©ºx,‹s”«nô{êŲpc2i7Ì„ôÈ̈{Sì¿t]ãá�kÆñ1(/%µ{†!—–Ì4fŠ#.m™)”D\hãy2ЗêÆcÆ)^ÈÔ$™›�èYØ8å"™³èY(;7F¥Àñ°7È\ÆþKçµîùVð_6DÜkFAšÌe&7Q¢Ÿ\Bý[w0¯ÝËú˜™$`³ô2ÙÛÄœÒv†$ ×¹ûÛq¼Ó¦<åÓgr‰ÜGúÛ飚µ­‚ªô)“Z϶Òv‘ˆ¾ƳéYV.�õÉØžÅŒô¹êõLŽ�¸1YŒûl,”�=—^‡X¸ß”_?!f7‹âŸG¤ÕÔËÆ�vz�ľˆÅfÈ·Cg‚ñC2ýú åuŠ}m{bQ­}*´‰íŠüq±ßOPæÍi§ ™”Gf)“YhÄ�E8}º<2Ðfã&eÏt°ÚÅ¢ßíÒ³¸qÊVÍÍÜåÛ™²Ó‡¶Ù¢É”™!!ÕHÞdΔOÆ�_>†$?ƒÔžaä%�VÔoŸ‘C7J/Iò¤®>ì�GŒ�‘d"µÑªúÞâY¸1™Ð¾a²s)�&ôòJU�‘¼Éœ™&H*£Ä,÷jÄMÜ Ó§¸‘´Ü$”HÊàü’ŀ˰±‘�LrÔ«æ2™]o¤g²ôWϲr36 J[¤g¦,zfÀ½)‹ž JÀ¸O)zf”æë³ê IÆ÷šÌ�ô¥gêƒQcªp¯—ÏfŸLf.³q#ßk7 ƒ=ey“¼#›žK£¡¢†}°/=C'ŸEo$“ø1ꃆ‘š|¯;DÏ `ÄÍÖ�ý}ºÐÜp?"E™tŸ){+eˆ›Œåã±,„)ʧ–—G†FΜö'“YB[Ò£šŒ{5P ý:�|ÜÀ@+F1ƒ›,\*ó÷š�KÅÈp™•Éø¹É+#8½|6.ÍòÊî y#½!s¡²r-ÃÅtÙô,Ö7Ð3e®_ÜȼgèY6n¤­è™Ñ½éY<{ÇÎж¢7ä&CÏä¨=ëÀAÏ¥Òg³ ª”ûKÉ'„‘6œÛÉ¢gF{ŠKÝ}eíƒdá27F}Páf z–e0n$oÈ}_\f郆ÜdÓ3#ûÔ‡¼¡Þô†éÅÎRŽzòŸ;ÓnŽ2ÊXºÀò…n®¾£‰z Þr–Ã6#Ùä�–ÌŸ ¼Á^¦O›À¹çžËüùó9í´Ó¨¯¯çÖ[oaæÌY´·· Ê«Ä�<§3Û)3àóõ½WØw‰ÄÆÿCŠôo/iÜÙßqkv $ƒ­Pû^ÖÏ%³ÆžLsã&¢qÆ Ë*;´··óÁpúé§ï�óm UUkx饗¹å–[ ?á…xñÅq8LŸ>�+®¸‚%K3cÆÁÛuÍÊÊqÛüý�‡ Þv¨Ã6._Úó @íZOüq?9£ßD/¼@%‡mCWÿÇüùóxñÅ3>Û™NåûB2ØŠä,ÞºàŽd<kžeÑ‚ügi3ëׯç€à‘GÉ�­ªZüy~¦GKK3o¼ñÆ÷æ�Ö¬Ycx|É’ÅÌ�;——^z §ÓÉ+¿ ªj ÷ß?—_Ô:¤ööö~é{{;W^yï¿ÿþiû÷‰œCRáø3ºhÚb¥d¬£b�¾;tÖ×ä°7aÁ’Õ\w÷Ó´t¤ú>u_.>íÈÔ eìØ±lÞ¼™ÆÆþñ�âv»¹îºëxóÍ·øàƒ˜3gg�u&‘H„¿þõ<×^{ ƒ æ¹çž£ººš@ @gg'sæÌ¡ªªŠ›o¾‰3æñÇç•W^Ááppç�wàñäñè£�RSSCII #GŽä�wÞàÏþ€&òQ"ûË/¿œõë×3fÌZ[[¹óÎ;X¿~=çž{.ëׯç§?ý)W\q œGYYY*ú;êÈ£¸í¶ÛX²èSÎ=÷\fÏžÍܹs)..fúôéÔ××S__O(⤓NâŠ+®à¶ÛncéÒ¥\rÉ%lÚ´‰oW͹çžË/~qùvEZß7rIF”ùDºÀ†;! ^¼¸q 0`î¤.ƒ�ÄrØ«pÓýÏóÔ=—3y|…æø‚%â];ííí=øý=\yåU<ùäøý~N=õT~ø!.\ÈÍ7ßLKK3\p!/½ô~\p!O>ùwßu >ZÀASäÑGÅétrøá‡óØc�òÜsÏñþûïSUµ&õ�'þùw¾Zõ ÕÕùÝï~Ïo¼AUÕN;ítžxâqêëÓ©ýõë׳àÃøýþÔyŽ:âpZ[[Y²d ûí·_Ê!Íœ9‹7ß|‹²¡C˜ù .L9ñÝ 9‡¤B€�†.8l¾RGé„\Ú®¿(£ŒUË�üí®ÁÜúÈf¼¥ä¸SA²Ø ËZ¬JŠ ¨¬(Ñ :†ó�âÞg�àþy²hÑb</½ô2 Œ½ŸÏÇ«¯¾ŠÇãaîܹlª­¦½½�ÉS¦RY9Žªª54mF**9ä�CxùåÿpÜqÇPY9Ž@@lS:yÊT|>Ï=÷‡~xês€H$‚߯ÝÒbÍ·k˜>}zJÎW,^.2n\öùœGy„Gy„%KsÚ)'óâËÿÑ|®|wÍ·kX¹r%çž{.ÅÅÅ,]²4})зiwBÎ!éà°'i¨µñÑëyœ=a€›Lí…P¢"€_�SsÈa øÓ¯ÎáŒëÿÂáÓÆc· ÓT6¤ˆÙGNáœ9§äüqƌ駞�ú­ÆþûïÏÍ7ß �ŠšÔPíÖÖVÊÊÊèìL�(…3  IJeË4Ÿû|>Íw6ÕVSQ1‚7ß|+u¬½U{]·[ÿ�3fß “hoo' Â<žô&—#2æÐ^xá…ŒcUUkp8ú|Û.‹œCRAIÛÍÿlƒË¢¸si»>áÅ‹5ìaÕW&N òØÖˆù7»?Ç›ÉX$7K¶üåÙ÷ˆÆbô‚C&Ìf3½áÌÁÍI'�ļyó˜5k&cÆŒaÑ¢Å\tÑEÔÖÖòÖ[orÈ!3oÞ<:è ÊËËX¼x gžyfêûO›j«¹ï¾ûðz½Ô××óØc�1sæLFŽÉòåË9úè£5ÎàôÓOgîܹÜwß}¬\¹’3Ï<“ÊÊq´¶¶rÛm·¥¢´™3gñè£�¥"§;Os=–,YÌõ×ßÀ˜1chll¤°°�™3gñä“OqÚi§qÚi§¥œ‹’Þ›={6eeeøý~æÏŸÏo¼Ái§�ƈ#hjjbþüùÔ××sùå—síµ×ìRÕv[ƒáN ÃËJ#�Öì]eß ”w»‡;‘3®Y ðtÖôѬùÂÉ»Wc³'³Î%ׂHö=DÌ�M{ì1ße“w*Rö͈c÷Š*;}Ù÷A§ÝƲïÐ ¹óáçÕuò%šÃ›7oæù矧³³“éÓ§1sæ,ªªÖ°hÑb9ä` Ì«¯¾JGG<ƒ3Ö”R¯Xñ9‘H„M›êSÕvJ9xQqGy�Y>½àÃ0eÊ�©cÊy7oÞœJ¶·‹ÝµgΜ™š;ê êïöúŠ»Í›7ã÷÷hÚ:Ðs~—¨>Œºú†­îÔ�sH(£ŒŸì7–)? pëÃ[rk’t(£ €HXâ�7”rôOº™~”¿Ož¶æ�LÁ ÿoÚ´ÞÖ]9‡” ½Cºó‘W8`ß f>Y+g+$ž7ë }¾ï&n.¿ürZ[[©¯¯çλîä¨#�J9¨þ¢¿Ë”óîêË!úë�r)»,˜ò£«?ïÿÚ™½JTô÷»±ñ[;w?]Ï­o!@€úíŒ" úÜÊZ‹þvný<@_ðû³¾>p» ÌUŒ“p¹ú§O_|öIßw—fñx<ÛœÆY±âóÖ©m“‡§7n¬®oáö¿¾BQ¡‹U¤©=`$ÏÝÝë?`íúÖl§Ún˜åÍÜ$“vŒn2÷ßDZÍ&ʆWd¬…ªªZCTõ;«­ïù�ööö~•jWU­!ìÅîtÑÒÒ¬¹@"ž ϾoOBÞ-™H϶�w?`³ `;ï­ ç�  À¯îk ;zÉUÛ)ÎhÓªý] §\"œÂ¶”xoV¬ø«Ù„É,žÍÖ:÷@á¶j ’ÅÞ÷VÅqìXÍ™�Þbû¸ ò剄Յûí�\ÖCG–!©wÔÜ�üÛ¼À”)²dÉbF‚ÛíÙ®vlîZ ¤�Ù?ïú9�üî"lÖLÓT9¦«Áñ] 1z:µ… CK½ $š2dN‡}ë‚ß#’‰±>a_ØÕŸîNA”ÙÝt¶KÔ-w2qêÞ]ÂìÅKû*' ’ƒ1C¼¾â+Ê'šæŒúH× eÆì†)�È˽M&ÓwæŒÜn£G–o³Sš1ã`V¬ø�'2`c»5øý~–­ªM´Â<‡N©Ü¡×Èá»…d2aÝFýýî´~7G€¯=éåÜCGÓÝnÆ‹wg7é{‡/e”Q½¼˜§ìÇŸç  |¢‰zêwš“¶˜÷lµMHßýý9v*ÇT°dÉâÏo€ˆ”ü~?[šþÝlxöÍÅ~þÝ\òÛ§xæõϸ䶿óÆGÿÛúsØc°g÷ìíÄq³›¨¨  ï}»êõEΧ\ÒÎí�×ËóE;¶ÈÃ4€¹à;�ö&X­*ÇT°~m›7oð÷•J³mvJ&íÜÃ?_úˆ…OÝÄ¡ŒäÉ{.eõë nËw7o”î‡\Ï΂:(Ÿh╯Ö1¸4–2Î{:ÔQÑ ûìÃÓs‹)ŸhâÖ‡·à.íÚé©ËÈ@ó_»!LÙÞ;ýÀjµ0fô¶É))ŵ›¶ì�öø¼…¸œv[ðy ©ß�X»>r© KüyNé^‘¶SGE¾žO�/ÎLj Úï»xaoÆ÷‘²SÃjµ°Ïèá466PUe¼+u_¨¬‡Õæ`í†:’x›Ié8q«×Õñ“c¦rú �2óÒ?²OEiêóHÄàu¶9ìQØ}f†wšÖÅyæ¡"ÊG‡™uùž³¨Ú¹*NhéOþ¹˜Û¯çê;š¸úŽ&·»¤;‡�áûŒ�ÔØgôpj7mÙ¦wéTVŽcóæÍT­¯aôÈáý*:Ñ;Þ{çœÀ„±Ã9¬ˆÆÖŽš1a@íØÛ Tsî)È9¤> Òvn.üU #ö‰ì¶[ )ÎGŸv\µÜɇ¯çó“3(Ÿhâ– ÊÈ÷ÆS{Ñ}ŸQ‘×»gGŸ» F”eKS;+V|®Ù� ?6lN§S8´m(ÑŽDc<ùÊ'l¨k"�‹ÇY¹¦–.^}ÊËù×µrÜ]Ü7g(+—:Ùgbˆò‰]<·l=…¾8Q»?í`X-»Ov|h‰�-°MNÉçó¥vÔÞšS‘`š—«î|Šîž^f9»Í‚ÙlÆ›çÚÆ»ÈawDÎ!õ7�WÆô#z9úÂÀÎnJV¨ç€Þùw�Ý5˜#~ÜÍÕw4ÑÝi¦À§l”( xì½�ØäˆÈ]ÚEsÎí|XwþNÍCK|tY¥mZ«äóùR{Ç >‚|·ñ4}Ên]M#o>r}¿ïíðûý òåïìfìPì>ö�%êh±ðücÞ]®ÚÎ+ÿ+£ŒöUN.±£vu(ñF)ðÏžuýC|¾ª€Ú†V~õ§çpºÄÀo¨Á¼ó�_oû ä°[!ç�ú‰ò‰&Ê'v K°·ŽR§åºÛÍüdÿ±´7[ø¸á[Ž;£‹ãÎèÚ£О¾Kîõ®••ã¼³ô”)²bÅç¢I톞¼çRâ±8u�� Rh˜²³ZLD·ùrØ]�ëÝý€bØŸž[ÌI“Æb oߦ’ÛuZîÎ+‡²j¹“|_œó¯oeþgÈ÷ÅS»(tÈÿv$£;nNd »/ï*ˆ…wSªìêPUµfÇíê Ï•Ùm6\.'×þá)Báðio»'r©Ÿ ¼"FC­�¦uñïm‘¬âˆ”¨è®_Žâå¿ûðw‹õç]×ÊÈ©­;uo¹ö(NiËæMßÉ®§?�gÿo™ág9ìØý†›; tpÄOܼ¾¢�ò‰&øŽ×$©çˆ.;§€Gß®áÁWkú|;ëîˆÂ‚Â�Ý„úÅ)­«®ÏxCi ”„¯ÝP‡3¦-j¨ªn`îSosë/‘çYˆŠÒ>}æ·»í\CÎ! åM¬ZîdâÔ�mÚ_(ލ¹Á‚»4Æ7_8iÚlå‚ëÚˆÚEÅR®<;‡�ÉdÚ!»:Ô¬XƒòRÇï�sw\sšá»�rØ;�{ò@€í«œœ{èhî~z?€öŽN®¸c>÷=ñ©²ïq£Jû:Åž…Ú÷¶*2¹|Ïš?‚œCÚfP½¶˜—ÿîãç·4ã-í;m§DFwÞPÊË÷qĉ=˜}Ý9g¤BoO®Ö¥$Ã"òÔ+g‰ Jiä°{à³Uüh긔3ðy ùËmçòã+ÈúÆØ7~A·?ÈÙ³Ä|Õ³o.fã¦&Ìf3%Eùtt÷âÍwqÑ)‡·¡ÁO¿ÃÒ•ëp9íòƒ}¸è”éÝÒJžÓ‚Ï»ý»’´wtì�síJÈ9¤íÀ™¿h#’Ä[Vû�S/z=ð‡9ª—1B¹²n¢Mkpvü�äÖEsØÃP×ÐÆø1eÇ}ÞB‘XÖïUU7ÐÜÖÅÙ³æágÞãéW?å�¿Ý�úü¯Ï„ÛiûNÚÜnüósÔmiå·WžJ0æ“ÏEZí‰ÿ|Ì�â.;óèí¾Æ}O½ÇèòÁ;ÅÙ~—È9¤mD”ÙÝ\rS ¶,{Û©Ót“ ¦æ�ê©ÿ^Û»K£ñ[,ß¿áÈa×@(Iý?‰—wiЖ wÿíu>Xü5 Ÿº—ËÉß^ø�+=Ïôð3ïÑÚÑÃÒ•ëØÒÜÁy6Ÿ®¨âýE_3tp!/Ì»†X4ÊÏnýõMí¸�væÝ|>ãF•òøË ijëæãeß0¶¢”ûn<‡Ûx‘Å_¬Åí´ó»+Oeúc4íùrM-Wþôÿ¥RŒ“ÇW°ß}Oc IDAT©¡�g^_„Óaå�O¿äÀ‰£(öæññ²o>´˜{çœÅ��¼Â‡K¿!ßãà·WœÂäñšûìËç·WžŠÛiã�Wà°ÛxÑ×üöÊS÷˜tfÎ!m”­„.8~<ü§–‘Sµi;%2úûýÅüõw%üîQ±ËqÎiá‹Ô£vv3rØIpØmüæÁ§øíC/`±(s„Þü¾wCyöÿ–SQZÀOÜ„Ý&5Ím]$é�[Z:Yùm ïüã×¬ÙØÀ�§ÞÂK\Ã]מÎY×?ÄKï.cÉÊuTŽÊs÷_Åg+ª8ýÚy|õú½lØÔÌ'Ë¿åÝ¿ÿ —ËÉ�~€OŸù-5u›9æâûX÷Þýš6�~üt.¿}>ï~ö3ËIGN¦¼´ˆsN<„¡ƒ½üüô#¹eÞ <þòǼó·ðx<ÜùÈ+4µuóáS·°z]gÝð¾zýÞÔñOÞÂßÔ¤Úuü� ¼´ˆ‹~òÃ=ê•ï9‡´�(j¥½ÙÂÿ>s3rjzò¶Œ2š,X}qŽ›ÝÄŒ£ý©­€rÐ"?/íÍ8{ÖÁ©y �bʾÃX½n3KWnÐìò‹§�Òì#~ˆÂ‡ÍÊq?Ü€'�¦¡¥“�—}Ãë_ À¡S* †¢lj‹rÏ8aFÊè¿ýÉJ;hòJêÜ«×Õ1A5·yÑ)‡sðäJÞýìKž~õ~ûàKü÷ß¿´‹^Ï™}Hjè…·—2ûÈ)<üŒ(f†¢¬ÙØÀ o/åäcÊ8n±˜q9l{”3‚œCÚ.tÐA™ÏÍüÏ60|t$5OäÆÍkOøøÝeC¹ûéMwF>Z÷Þ9£Hö­pLÁ Ç®[¾œÃ®�Ê‘C¹ç†³™}ÙŸxâîK9tJ¥ÆÄbqÍâVkÿôÍí0‹Åq9´¦£fLd„¼FêØCöcä°Aß7ª”q£J¹æ¼ãøá9¿ç£åk3dòÜÚòõ cÊ()* ‘LðÐmç3|H!ÁP”}*JñÛ2÷æs>dÏ*dPcÏ«üž ÀÄ©Aº¶Dq†|)§T»ÑÊ)—´säIݹE¯} átâÅ·.¸+Á5˜XÑ�0âXq,±¢IÚö\#±«cܨR^ý˵\xÓc|¶¢j›Îqü�à‘>DõžÓa5¬`;þGðö'+™<¾‚Éã+p;­QÊ« V¤ªàÚ;:©ièbTÙ`òÜNêä¨+Óêüa�çË5µ5cÇ<‰}GÃårrÜ�öçË5µ÷Ãý9î‡û3iŸr\.'—ƒ¦¶�mÚ»; k„´½›†î-PÖ$]}v%LN0uFþx3WßÑ�sFý@G¼hëB» ÊCò ã£wÞaùŠq8Ìš5“ÊÊ ù$Û÷¬…Š»2&ŒFé á4&ŒΫ¹–ÿõ>‡MÝ—’¢ùò)Ìs“ïq1lpz‡‡�œ’úåÈRbñ—Ÿq7Þÿ?<ç÷”•øRé»Ê‘¥ŒšŽ€î�s·Ì{�ƒN» »ÍÂø1e©Å» Ú;{øñ•¤*ʼnL_ÁˆÒB®¸c>Gž3&�e¨ªM÷^:7ÞŸ>oY‰�ç{¯?�ëî}6ãøOgÂUw>É‘çßÅ}7ž“*€ØÝ!³/+�,©ùœ6ÚRs9£š ¥h¡ˆ"~õ ^y.üY‚¯Þ@¾/ž+^�‘\54ëg¦`�’L©(ÄÒñ¿ï±UÛ€ü ¤¡3{öl¦OŸN(âƒ>àÔSOå†n€uÿ!måD9ä°wa䱿¤®¾á ôÊ?Õÿƒ@(k„T»ÁÄ‚O|€�_ØŽwÎ9ÉP¿^üÎß”0iJˆß>ØÂט4,NБsF…µdQØ¥œR4%M¯ƒq•�à…^ ²²’?ÿùÏ©ãwÜq3fÌàÂóÎÂaLgÇfìñ6:üÝ„’éôLiž—°¹_‡HÝò!l.¢»³�˜Ü¿.‹/uŽ�,~ÜXS‡É´{ÌÉ%ñíJ±aSædæ½íб³¡ìÒ,ÖìÅ<Þ’Š­~¿£©f-Ú=�Õ!��àÕ‹¼¬\ê¤dx„éGù©^^ÌðÑÊ|{§sR;"|q>z­€—ÿîcÒQΈ&©^lfÒ‘;¹¡»¼^‘º°–Œƒ’qD[ÖbMú!!rÙÀ®û߇ß�%ÒA~Ægº}ÇL É„)™YÖdùÉb“/eE2Y°Úì`ì�´äSSWáža|ýõלrÊÉí8ú裩Z_ÃÄâÁ8꾤ñ„$ÅÒÒ/ìEÌ3üã lÍí´_ú"Eùl¢ %SN9a hÍfZ¬øâx1aÉŠGîßù�ˆîæZH¬Ûº  ©x÷¹75’‰„áq}ñ…‚ªõ5̵õªÃÖèü~¿æX"“¯)–˜Ç“é¥æÉ˜Øo1¿ÐK±/ë ß¡èß{­²:¤6Úxâã66­JP>ÑDsƒ…s ÀÇ ß’ïKW”íÉÎIyg‘7‘°ÄY‡�bÍN>nø–_ØÎ�/Æ¢ ø÷3%<ñÇAü·»U³¶ ÖAûo-1qß1†Ÿ}×07‰ˆ¦°°Ðð͵­­­ø|>l]-8ÖÔ^LÇ�qãÖ8$]Œ¤`%DÝZEñ!"#ïç«(zoŽŠ!pà�~·SÙ6‡]ÙÞYdÍrÜfëß2ˆ�¾6^ÁæÍ›©®«¥rLVë®Uh�5Ö­—ÿù&е3ƒKcÌÿl¿{t ù¾8Kx˜lŸÈMç•á–ÿ•Q†Wþ·»Ã‹—2ʈ·çóæ#ålZ%F3 r÷Ó›È÷ÅS¯¯§žŽ<±›ŠÊpêû9ìXì ¯k>óÌ3yóÍ·2Žûý~*+ÇÑâ+&2ØG¨8ýÚÅɨÑqàDj.žMÒa×È)UšŽ:±¦­eŸ={Áp4Úצ[ZäœíŽÁ°aØ1ã`ªÖ×hRÒ»¶ê•¨§ƒFNõ2r*€›àÂ_µ¤äÞùw¯>éå‚9­L?Ê¿[FN©WC„%lvêÞzQŸ¾�ÇÝOÇ)ŸØÅ­o1|½xLœêN½Þ<ÛVB9d¢° s$»Â‹ËœN'_ü3V¬ø_„6Å˦[ÍäWøùRE÷„Œ Á†�ÊA#V¢sú¤"nŠÕj%sÊÛ�ŒdÍšµÌ™3´sBkk+yyya·­'Y¡?p YÃtf)ÚÖ6ܭȾUÛ0—& Ù'€×›¸°™íôÚÜœèº�HDôÁ `‘Éð«G7¼HvºΰiÕjÑÏ9�&‡QÉ_?Ðr]¬�†K] ü͘ÂÃÄ)'�Êвó© ì{%•ËWvãrÊøÖõ…”Ì÷ó£ÿì#I-¡‡¾u}!‡ÞÖâ½Zs‚ìù2”*ÿ”�€Œ¤¸ëÚ"æ–¸¸÷Wm A ƒ4Bç\M^¹yƒg»ÝÎÅ‹í¼ß0(R™éé¤êõ“)·ON}wgÌStzµrÄëêI'[/ˆ$49XR ±ÍhÌA 0†0üçïZØ÷J*—UZé5Êøå�²ÙxC/•¦^˜lØX³QÃo~œMÇ/†Š„Ûn¢ÈÓoù†ñM :�Ž.º‡ì+¡ìé%÷¥wé»âr\‹*�´[Q¦�ÎõïÃXµ6EM4}çO¬Õ Ë©Ó ôÛíCÄ(�†âây^t„©¬Ì Ê# "Ô‹Œ1#½Z‰ÞÊä$Rò`½'Ô¹`²&eRRLM3O�„&½� ¢³]ξW„&¯‡z?F«ÒNiÄIq¨÷c”*)$zÛ�@ìè E8ì rSC茣ܗÞEÙiÄg¨•è d逹hpbìhCý.y&à t»=TBÌþ]°ý� Ú {êxµæJ•ŸçÎàöÏ–Ðx$#ØžhªxåiCb$Å1�¨4IÓ}a¹xñ☦†!¾ó2è+/„ŸFÚî ý�ýHÛôlZ‡?Õ@Ñ“¯¡i Èá†ú‰A.MÌ ¥ËØËœÜ|2'(F£QVVNCCø۵u#£h£S*X:'}Äý59”••sv ½U,˜ù‚`aêTµGH\~… ³IÊÛ¯ Ös¯1…,g~L…Ɇ�új~|W.o¿œréºíf »víbñâÅÁŸ;ïø*÷Þ{oØmó ú£§ÈÞý�×®¡ýÆ+�·žFúá°'5‰Åˆ²ÓHþÿý :?ÉáŸ�5¤©ÀiïGAÄ)£õ}s»=|Üiäœ3²�ÃfÃÛ5²õÚhxœã÷Ô)¬ÎÉûX£ÅBkk«è×3 ¤¤¦Ål†Òì¤Ã„ ZÆ‹WvóÒ‰3|ëþ\N ŸÍYÈõ‹æckO�YÄdÂÄ‚ÅV¯·’–árÅœ@\§ïx=QUUʼn'‚?�?ñ$ýëÈ”]@L4Mmd¾YCꉳHƒ)'sn®,ýj!jî)Ï£¯¼0hŸ•(`í³ˆ2�L„ÒÒRšÂX¢{m£[ºGCâ°Ó^[‹ÒØQmG, …|„(:<œl½0n ¢PÊÊÊQ(Õ´uD?­<û)ÀÂdÆRåçÑ¿4±¤²µÊO¯QÆû/æ#¦hŠ“Råç±=¨‹‘c� ¿×TSZZʾ}û†ÜZ7 Ðõ¹åøŠÁ&L8s³húêVìE¹Áºbû�WÒôÕ­è�žštê.�@¿Ý�F#r–T„dffQ[?4m×Öaa$‹€y»º¸fݺˆÅÈæŸ¢ ˆ’^=8‘6 J‡ÎDôºeeåX­Vl¶èžÓf®©A,aZÒy‹6èƒ"ñÆ‹©üðKùÁŽà¡Dc$…-¿¼/›õ×KñÊ„Û.Ò¶A@Ô?ü .åÊë¯ïæ‡?ü×àm­VËCý×�m´h‘8œdîûóªË¨ÿ×/ |4Mmäÿßßh»ñ³XË‹‚�KÎàü¤¦;o€ôT:ñ¢ät{¦d$u´¦÷*c¼ÆÊéŽmº3-%·ÛƒÝå�Xˆ:.v q8¸fݺ ‹¦ÑhÝ(•Jt:óRµœƒ`7ç]]]-�ç‚Ï�:Éþw³_�Œ!LzôlºæÎsaí¾ø¨�^s&_þ^7ú—ãDE$ÐÛî•gô´7+xð¹Kh$Å-¨Ä6VÕé’±Zû°X§¯uLAA!›7oaéÒe¼üòË8¶lÙLYYyp;�.3frÿüÚ¦‹ø”rº7#’C;5f#©[»°– é n^¶€´cõ(»Œ¸ÒSH’q'ÖO]¶sÚôŒ�±R®iyó€ößóÅvÞÒe‹ñ·šã¤äŠ[×#qر�Hzû¨\²xRf‹ÐÏ�XZ[[9ÛØŒÁ`r 8ïêêj#zÞÐm[[[±Xûh<߀\&%E¤ƒ6”KG�Œ!LÅ+ÇWœùXÍŸž0�5ÇËu·ž8'#$ÿü‹öIþŒ"ÌÐÆPŠ‹ŠE=M$‹øbMkk+7ß|37nä£�>â�7Þà'?ù÷W–Š~îÔ$zÖ-îRpý¹Y¸² ØJ·Àü¤Îk×`^un­ e�øyQRÝÑ£â¿$z›DmëóI8uz|g[(jml;Äk4$½}�;ò1‰Cb»×‡Ë"8í$½},�¤M†¼¼<òòò¨««%Ëí¢Ëë ¦íüj � D(J¡ÏŠÑhŒ¸þ·¬(˜›ãzt÷žˆhF¢9#0W©³]NšÁKÇ/?úú|îüQ•¬ZÇ:« â£ß^¬ñ×gŽ!Iív®Y-¾%~¼ðë_ÿš¢¢B–.]Æc�=Æ]wÝÅÎ�;yôQa±ì…suH»?´¢"¸Oèô×põ¥ÐmBÏùó;$×6Ó»¡ƒ^ÜÕ¦$m>ÌY9Ù_sê¸x¿Y\ý“¾E悈ž>’býD©««åtË…!3€ý)Éè¼^d™™dÊdA§ŸX!šŠ‹ŠººZ:,ú¬%DtUéü¨CQAç/´ßØ�þ�[È¿í€ãÒ‹�†1&ÝSy9z”ýèÌ&)?Ù‘Ë_êëƒ'ŒH%�¶ûå}‚«ì[÷wÌzA�‰Ô�â‡Ã1ä‹zñâШ7ûØ8}ɧVàO¬ „Š�½°éàº+ËñçäÙ&`¨ñAm3Ú^H¬˜�¿U,…©¬¬|BÅtSVVuµ4Z,HvüjM°žt8ÂJÑböºì"Å¥ºñ\y2C//�8ÃË'…+¹_Þ—ÍŸ.œ�U¼×$ãéÿÌŒÚaÇ5cÔ�ŠD^ñÇk×®áôia1áÓ¿}‚o|ã›CÖ!ySSñ]¾2(F£]txm=ø4*´æ‘õ“À>®Ëè¹q#æüRÑÇç�qÍd¦2“Ò˜SIYY9Å©B—�@tˆ–ª«Lùñ$"$#&•1DeÁb•Ä7pµaã[?é`ŧ…âölž$;\܇#¶eP¼QVVŽÁ`Àjíãú3J¥rÈãŠì<:.›ƒît#²ýï“ 4}u+{�`8ô ®,–¯~‰Œ†&¤AvÁ ‹É|çúÇpe„qæGß'½[Š_©Æ£êƒÙz #?5Al-RšH{¡É’ˆ�" Ð’èÞ_µñjÍ *7X9uDÃfâ5Žß…Á„‰ƒ—M·Xp9%³{áã8s�Ä,ˆ�GêêjÙ¹óvî|€‡z˜ë¶naÿþýÁÇÝáW½+,ÂEˆ²SHù{ÍÁÛ’~;ò�”’Ä)4GU*Ú$4í‰� bËh‘ÒDÚ M†Ñ#¤ÌwOè‰%ÚSdg �hÉP¡´t]Pñ›gsî´ŠŸóŠŠ–^yÚÀ/”Åž†ºÙ;’b–~VÂ5W}ùåW‚ݾe Òvօ۰xȢ׋'~µ =`þôÒ¡†”¤ò8 ¤ë^#ÝdDÉ,MÅùm‘â…p‘0)ç]¤Œ*HA×YöÈňÁtÌl+‹&ìïŽÀ‰æªàÕš@ÁTÊ+O¸|¥�ü -ÙtÓ†�’ ÆN9õ'Ô³r‘ìXé:©Ý.zýÑL`ùòCº};¯@ÚîÀ—£’–õ‡´í­!Ysòx ÒV=†î\¦Å…di‘ A,(++G×ÚÊÉÖ AQ’8ì4Z,4>Dqj*:]rÌ–bL¨†4®X„j6ˆÔ„FKZ´¸œ~ù£,Œ�¹¼Û~𹆹#¢¥ÀHŠWkN�_1KGR\cËC¹çž{‚ÿîMÒ’öúó(;�´|ñjìE¹#lßJ½Ï…³t—§aH‡®SRöô’ùæ»øæ¥€Èå4~‡™¶šeN”h´ã1 øú»Â®=‰6SaÿžĤÓ"�lb*J@P˜°X8Ù*\lG[ ¢nj�d[‡UP f±8…š^8Ü@õ)¤¼´œòa±g„§ž_!åÔ +g®zTÆù[‹54ì}{/Ižø†O–•HG?ÝIeâ?þf‹… ë7Bû Í›·Â aÿþ¬[·6øÅ·•¢ì4’öa=ö¢Ü°C÷\é)‚y!„Ñzà¹Uâ#ÊÆúxŠÅŽ›(‘ôt»Â lk=�¶ýcŠ Ä�Ì*åø…a¶Š‘ÑhÄiï'+sìïS¤-� ¼(„)@8� ¬¹ÊÌÌš�å>æ.»!e”ãï¸:ž…%¬]7¹ÝD IDAT‚ën÷ðìcsùÓ|®…M· ncÆñ”†Û®(áÁçZøô-³g‘ìxîºHÈ4è).šµç› �{ßÞËÁƒ‡‚‚´eËVn½õVyäöìÙƒF£¡ýÊÅøæ¤Ó—™Œd .4\hÂõ² l“^ÛJ¿Zì�§;yRôqJ¥2QCãâ…¾nñ¾ªÚ£oaK]*z{—Ë5#×E‚J“4n︲Ң¨‰R(Ãot9ìtY,4Z,dÊd(dR¤ לZÛ·ÁƒÄ08ëc6FO¡ýñþå¿Ú)(q1wžÐƒ­ñÈ`´”_!¥¨Ì‰Å(C;›Òvã¤ë@œÃ®µµ5.‡òÕž®¥²RX0øúë»Ù¸q#÷ß?sæÌaÿþýTUUÑîk§§<MSE�¿„eq [®^`d/»€éj›Hÿó»$ghúª°`Öm3�*5ÌÑ\bx�Ì/w�"‘Jyoïû0ËI …<(J�e bO”†úxçÀÿõD¶Ójû–d[‘,èBRц$·Sh㣜F7QjôÒg&L¸UV¾ôÝn*VÚ9uDˆˆþù–B´hI'�—Nœá–³3�0Y¬Ö>RuKÑÄ’ÌÌLjkëØ½ûuV®Ú¦Çh4EÇ›,\¹¦ž8ìIžp½ì4…í,K…>6lôÙŸ‘©TÔ€Í륫«“®®N\v3v»}ÈÏ¥D@”êêj#Naæå屪t>0h �„HæBÅÏÂØéŽž”î!ýì¢Ah´T±~üXÍç„ß§‡ÒIç�/y)�oÄP1 ÜvFù˜¯HvV«•LC˜Ž•ÓLUUóçÏç�ü#ÝÝÝÁv/^äúë¯Çn·cLøÂ§§Ðü•kIjëÄ•>èJУǔK°†pâ){zé®,ò¨(¸½#3sÅV �E¶FâS à´÷ãöúèµit¿Ï�×ïÇïqâózqú$ôt÷°qãÆXq\*J‘FJƒ�U¥ó9ÜpFT¤4QâG�†Z{«IgÔ^/#vb¦�·Û‚WÈ·¶„ WÉø¿ÿƒË–¥òó›g¼ ùÝãÏÈë°s¹\(ñùñܽû5žxâIôz}07ÿý÷‚ÉAb’`ÔѢř›…37‹œ?¿ƒº½‹Ö[¯�t=†v;Oï¢ûö*ü9zôGO‘ùf ¦µËèºr°CølG&‹]§†Â|q4{Þ|'fÇoLV”6­ZMuõ,1¥QSvÒÆ8jâÅTZX”n0xbû îüQIZ·}ÅKi‰”tÒ™K|ð'ŒˆúÑLm µµ•¯|åvŠ‹‹™?>?ýéƒüú׿»m -Cn+,ý¤þŸÍ {Ù¥~Ô€m® Ø¡VñÙŠßÛá|bÑjfO [ “Iß�°8­6�t޼¯á§ÿšÂÚ�R­ŸÁ£)¢Åj5Ñ™Hmþú׿òÝï~7Ø™¡ªªŠ­[·òõ¯=ìö�Á{?¿¯F…·Xž'Í5à�¬¢?Iø ö]q9NÜô—æÌz1ðx}ÈqP'”Î\AÍR?Q:ÛP�=/?âuDkW®¦ÅZ,@xÇÝD5 *[PÆ’Œ%ÈŽMóC‰bboº(¦(:Nh´4¯¤��”}û„?‡í„:‰O'bíÞ3Ña'•)‚–ÙuëÖ²oß¾àc¯¿¾›+¯¼rÔ}�&¿ZEçµkèËL&õÉçȰ{é+Ñ‘vúc2ú}™ÉAû÷ðÈj¶âŠôdªˆÍg"U«¾äL ˆRIqm­-´N`1õðþwш˜ÆLÒggg³˜Å|r蜫c8fx< ˆEI¥;8i:šrõ|á_…+ —SÂõ‹æ³ösVîýU[p»¸gœt]d††øsØÕÕÕò•¯Ü@ww7óçÏG£Ñ`ìîäö¼cÌ}ÑŽ-:—YJ:¾#Ç1è Ⱦ?dÛK¡n4Q¤þØdk4ÉiX­}Qé>1ÓˆÒÙÆó@äÓ™ËÊÊ)C¸ˆ´Zû‚S€H#§q«ÆÙÙÙdggsðÐAÌ%Öi‰&¢ŽÒ-¤éâäw uãiUZ6Ýbá•gô|ë'¤´¢Ç[L+"Òub ñè°+++§ºº:x»¦æ(.—`gS6"˜ü9¹x—Ë�u‘(Ôøó ñ•—£M/ÄÄ…I§ê<¾©hÄ=òé¯Uët:Îi¼àžfé»3�B·…‰´ ìS†°ô¡«««ÕJW„Q“hSåêJA”˜Á¢f\y<œoÝßÁ·îïà‰3©yOË=??G~E| “Øt�XCC¼9ì|^7‡V³ªr ­­­\{íµ¬[·.øøÊ•+Eu°aC�KI6ég„‹–b¼¼8–‡×ÈdÔo±©+êtÉ4Z,äÇäÙg©”ùÅs'%J Ä"Fô­¯\]I]}Í–f|ÅSlvPº'W4ŸæôœX†DKhY´Êγe°ïoY|©¢{BãÓcŽwˆ«utt�¬‹ŸúQ€@O¼ýû÷sç�wŽjbCú‡�H?<€/%�ä³™ô•èТ !)fOsô!xœñ3RÃÛÕ‹?g ƒ�¶ÖóQ{>‰TÊ‚’êÏžÇjí›pÛ¥Ðô6À–-[Dïq¼\¶ ŒBo!ÒÓÓj�‹Ò ™½B'ˆ F¡Ƨ/ÚÐÁ]§ùÒw»i9åã®k‹8¹7{F™"©™-fÒ´ñ›Ë_·n§N�Šx¿@ãT&ün¡˜ï»\èò ‰zݾ/$žÞȶ� n$X­}Ølý1yîXãóF?0XP"8AkjŽNhÿ-[¶òÐCÿEuu5ÕÕÕäääˆÞwBªO¼°(ÝHr;…¶DqšžK¨/5WAG«‚{¾"¬W ¸ñ¦•qº3(.—–2™L$%'Oö¨b†ÕÚÇ[o½ÅüùóY¼x1‹/fÇŽcî#‰Ã‰þè)ÌÅpçW‘ç— ]¹„ÞœôGO!q8Ñ¢½¤DI&‘HbcÏ6ͬ²Û”�›m [ŸLuõ�ˆöÛµk•••C¹nß¾]ôþ¾ä˜jž$Ã$t ëä7CÒr‘Lãô¼x¤‡M¸ŽxâÁL¾ü= n•uZÒxÁîíãÉÈòxª §¬¬œçž{–Ó§kEÑiÖÌ}’v¬ÓZÝ«V¡Së°¹äÈNBàêóÝ´ßx娩»ÙˆJ9½nJ·ÛƒÉábf_¶Æ†TƒeRRDMYOžv»�Ûn» øÿp„F;I­ÂÔW_ÙjüIúJtørÔøÊ„îáɵÍa÷K ‘G_¼ºœ3{ý‘;)»P4je¥E4Ô׉Z«4gÎÌfó„_/**R¹º’%º%S"L�áÃ…i*»-L7�4Þ~ÑΫ5'X½±�–S>~y_6¶öÔ©%‘é:±"c¶˜IIŠïUó ÜqÇCL £}CSuÊž^šÿás4Ýy¾5’~;™?}C+¾5Ýß¹“3ß»eOï%“ºs»"ˬH#qä‰ÄÔ/œC´)É—äâX1(rÊÓÓÕAMÍÑ1Û }á _àÅ_dïÛ{'ôZQS�ììì!„1¶i—!”Ù;s­è$`z0TØQªü´v¤ðôfò£ís§,Z›®k÷6™L$ë¢7à/lÞ¼…={öP]}‡ÃÁë¯ïF­oG¤ê ÿ÷MŠ …Íìâ-9͉Ó(lNЉÂÿ}ó’%¿/²ï¬DÝsJ ] ’)¸—©”⢹äÍ1ÐØxŽêêÔÕÕŽˆš {öìá�ø#kÖ¬áꫯžÞ‰±�…´uõu´�iÃ9ßS±˜é¦…ɨUn€WkN Ü+åÅG \¶Bv|úTIý(Þ©««ÅápðÓŸ>3‘üñÛå¬jQµu¢ì4âNM­Æ'˜0!)Ê 9Ë€£ #ø·q¥§àÊ2 ì4¢¾Ø.6mv¶àóFfûV(#?1÷àyI™š†Ñh$33+ª¯1ÛÐju,(.í'&KGÄãõa0ÈÌÌ"///8–%RF¤}ÕûøÔ¼OMødR¶ Œ2ʨ«¯ã|óy¼…’K.Š™*¦C…>xUþûGÓiªSñjÍ ò+¢¿vÉß¡7]Iý¨®¾.nëG¡”••ó‹_ü:Jtuu)øfÊ2ƒÿvæfÑõ¹åØŠ ð«UÁf«~µ*8)”æøi§Î`/ìT‘™_m”¢…ß#~p[,è°Z½52)Æ®Ù]ƒŽ6µ �ZEn¶¿ÏG¿½Ÿ®®NêêjQ*•ètºˆ×2�*HÎÕNN;ÁbOê 7!LSGè¢Ú�4ðöË)äWHiøXMK}WÝÅhIäbX±"c2™D[ç“ÖÖVvî| xûàÁƒ\wÝuüâ¿„Uÿž/Êž^ò~ÿW9™´ßx%08R"PWšÿÐï1/[@çµk‚Ö~­Z‹iE9~‡äÚfšî¼§,ðNõ¯W8].ˆb£·O>$]çWkfìZ¤x@"•¢ÕêÐj˸Ûí¡ËØË‰�>ÄfßDwÌ”�w™—ÇNP`) lAÙ¤x„0-»´¿`±Ä„ ½ 6Ý"D'û^Mæ7?ÎæöQñ­û;¢ÓOd׌HæiUñ¿ $//�çŸ~È}Û¶m þ[£Ñ`ÆLÚá�QXúq„¬ µr+lBA?༠<ˆp½!=•þî‡8 2¢þ{Ä~¿ø”�×Ýó…Åqi§úc�B!'7ÛÖ@G¤ÀXeï2/Í�ÍPϤE …éࡃôêz/‰yKÓAh´tÇ¡´ÜMæ\á$øþë)¬Þ(A¯šXOlï:ß.HŸ¿k�ÂñÔSOÑÞÞNåšJÊˇ¦%ämjú"ñzéÜ(tcÞÅ;P/²,Rz]W]@ßÂBÔݳsM’ßY¦Ä/O#‘„¦ë$$júõ, øïðûh4¶`:d¢rõÄ=…R¹º’ŽŽ�4&„)†„iÕ Â‰®³]ηn, §ÐÅË'Ï0W%>Zr´:h©kc 2ïèu�’yó"j„,›SØ^!�üjX. £iì[Z]}õÕTVVòÖ[oQ[[ËÒ¥Kƒ�y\6æþå´~5[®FŸþ®†U¡ÖÒyí”=½Μ�”™=i7ÈUѳ}‡¦ëÄ£ ’ÂhÅmÐ1—¹Â Ë`Âl0ó·š¿Q�<ù :ò‚”Ñ;õM[/‚“•£åùÎòáZ”*?-§|€fôNâF9ª32rÓs1™L|ë 0hõ¾'--�›Ö¯zÒE8®Ülx.ÿ �Œ%0""ZÔÔeÉ’%Üÿý455ñüóÏsõÕWóýï€Ô ç‘vI©¿ˆÉ&äëL}½HB¾jò9j°¹)ܳ›Þ-¦Ï}ŽTÔXLÂ, RõéèÛšPXúqï¥Óí¡±éˆûc½€Ò7N´ã÷ ½8ñúýx;:™¯÷{y½nΜC•44:—N°¿�Ä;ò¢'[›„ÛãA!Ÿ9ѺËåâÔ醨?¯L"¤ÏM…!ò÷Z1p‘(•‰¿HõR>ù[Ž?Κ5kØùÀÎ =—D3¾YÁÝU�ÂvQdòäšô K‚ñ@8[“¢`nŽk÷�ƒîþ?T=Fú ²¸ð÷×7‘Ú IëDój·®¾Žó} «x,Ñ£GgJFÞ#ÃdÌ&;[Oqñ,À3CðÛ»ÁT�Äv¿W°ÌMB:Ó0NŠË“¾E悘c4ðÛ»EGH~eÒyŸ�ñ%ˆEyœ¿Ð~`ú~l!ÿ¶Ž1“‚më¯'ãØ;Ø ÓQ­h.vÓû©¢‘Câ œ«=476c:$¬'‰ÆêüĦØ"m”âïö“Q”Nö‚Àß+!FÓ…»«Y_— >¡‰ÇÿðN—›ëÖ/§µÓÄ–+—MÏAN±h¬š þU�n$%ѾN¸*ÉÙû’Αr¬Ž MÐ…-ùŠ}˜‹Ío³L³‘±¢¡/ï­áTýy6vëWÎçóŸYÂ5W,¦|Þè8åšÙÙ÷.Á¥Á˜);‹ÝŽÅn''- ’³©ÿò7Pô÷£Ì S´Ö0êT »øøH¥¤t§ ×ëBø­­HÚ� |á{ÿó ²Y¹¨„/ßý(Oîüßü‡M<òìž1Óu]^´9.ð{\a Þ f¢ âíf³�ÂÜIIø“…ªªÇˆ¦y°!¡mØ‘¾…>Ì+…5LuõuÑ8n`äÈ ééØ/ŠœåÈŽÉH;’ÆÝ*WWÎ8kõlÄom… ï� £qì“&¬ýNøN…9éäç¤ó§7³aÍeÔžk£¹Mh7Ôß?l~OR¢Su‚™�è•N]}}h•J :-î¤$·mGÒgÆ•’Máÿ¼@ÛÍŸ ÚÃÃ-²ŒÅ&¹Ž©OÞwé BjC‰h(>‘´ ›šû¿x�Çê±ôõs÷×®cÞÜ,šÛºØôÕŸ1¿(‡ÿú·Ótÿþ­›Ùø•Ÿ¢OÕòÐÝÿÀg‰L 3k�ŽD“‘°Ð$BDKom.6£‹ÌädHJ~>Qª#{�Ó¾mp1mXa YÃ+a. gž´QŠÄ,4(,��AÁjîäÀáãÜwß½¸ÜBcL¥bd;—C‡�û|465†}Ìï›XúU©Târ¹P*'îÈÒE0 P§KÄ v“õž¥$yddô«ß½‰\.ãýßý-í=,ºî‡|ôÇÃduóìÏneÙ§Šxì÷o±p^_ܲ–ë×/#)i°Ûz¿W…Yš"FL�ÇT©“÷·0O\Óx$.3uuµz�Àßi4òòÆOs�ÆàDÙX½G¡]IæÌÉu\55GG},’Ïr4í}ó{˜P�Œ®>á’oÒsmë¯GÛÜ€mn6ÚºVôGOaZQ�­,/¬éˆÙâÚ³Ò2n”#µøPt*ÈMÏ%-5-æ.9Ç™ZšýBö¾°¨€_ÿþ÷Á¿ÿ”nôqœÍ3…yYa'ÄFûª9 pž ¶Ïñ„i3# —šÕ¦êÆÀ¾ÆÓ�œ;âþý5u|uÛz~õ»7Ù½ïCžyðNŠ òxâß¿LÕw~ÉŠŠb.tÙ°¦‚»n" €5�o¥Ç�„º` ¿bt¢Ô*ƯÞL¤Ïœ±Ó"©¿ßŽJÙ�Z?ò=ô8G~ælîÐöS}ôôöÑëù÷WX­¢N˜]]�¸]ÊÁ¡ï‹˜ßß‹ …lè1Èe²à¿3 BóØþ¾>Ñ¢çr¹(+-w»pŸa·WŠ ñ£ä‡¿×Ãßçá4ÔŸF£ù¬èçŸTÓ¦£Ipâ%%a^¸ýá:’Îw’tþm¾{KЉ7êȃ�5L�æ­Ñrä˜ñ–q£i‡�«`L˜ !‚IzéT=F$›nÄ•-œºŒ£7a•d˜ÐKóE=¿Éd"/k^TŽu< Wl¼ªP„ûšD6½Ô.üâ¶´÷ð~M_ܲ–ËæÏå+÷ü–ÿøÞͼñäÝ<õ§w¸õÚÕùêš:(+ÊŠ�Ñd¦ÓdG‘YNÖŠõdLA3ÙXaUk‹¨m 9 ¥ ­6ÌUcajÈ¿Ýnçœá{Š€¡Ó%cµ20R!¶ÈU p‹ïÁþó)náSÁÅİ÷:5üVAŽ�l*𤻆:ñäR �«×áJNCæÂÏô·öãÈ/;Z0x0¢¿†)@Ü[Æ�ŸBjñ�$É`=販«õ×Ähì¡ß��¾Çˆ-7?(F-cˆJ· ô³sRBTq:�ì­>Å·¬åŸn½Šg_z‡ÓűOšxêÏïÒow²ý¦+‚)»öövzý©¤•mbî©MÅÄŠH»*¤†ÅÒå´�¿Q‚¸`tAÊ즂ŠÄÖn6×-¢%åé6Ò�œƒ#çh½q}P”ƺ¸VqN“TLƒe<ŒàÈ]r4RM°YgZj蘖Ūè^x…­½6óÍ_¦qÛvÜIIôŽ7õ15ñ¥ •b0’ÉÍÒÓx¡‹§þô«ÏãéïäùW?àƒš:ª®­dÓ§—â¡%ëIžÁÑP8¤²ÈDÆå°�¿QLýá¯Ò%;™!)³±°ZûD¥.Œ$P{è‚$ɶB¶}¦hQ DK™Éɨr\Ù¹t®ú ©gOá"m�Pt+LÎbgÌjLáœy~µ_¶tâ)½a¢£èU ‘ Aq¨èÄKw«¹ÿïŸFÕcļm;îË–¡ì3cªX0DŒ,ã|¨$Ù‰ñfbéì6’¢SóêÛ5ìÚs›Ý‰Óå ºæŒ&3]v嬊†Â!‘F– êv‘áv{Æœ}4gÎ苌‡£ø>$ˆã~"$ º„ ¡DK¡]Ì #¦âgÿ@ÏÊyCF[RyãÕ˜¢íʃ¡Î¼ŽŽð‚¹ÁŒÉdD*Í�/u@¤â<ÊKÍA. !­¹�´#Ît!/ø;#D€�®ƒàû“`lLV7+*æq÷=ø?¯â0]tÙ•ä]þwÓuxS†B©‚’~Oä³­,î±/.Å:ÀŒFã”Ô�.uD�A¢-4mº‘¢7þŒÒ$´Ê~í®Ô4LŸ™?ÄüaÄ)Œ]<-5-ªu¦Às…>gGGf£yHm$ž¢œHh?w†ôžD$­ú �«>ƒ©bE0¡‡á¨.ºp(ÝHt�¿Ý%ŒßçC6�z÷ðiŽ~ÜHËE#?j@¥”£Q«8tü ›®X<Î3Í>úûíC,ìÑ&ܨrˆ,]g41b4´"ßã]ÒN6ZreçRÿåoÚü É çð¦Éè]<�”ç°•ÎÅ=°¸6�Òƒ¡�Žh¤Q"D(¡ÔLÄñöëH«ßÖ›OﺫQ–ÎÃn˜‹­°ˆ,-7‚„‰Âãõ!Wü÷kjù ¦£ÅFo_?¦^n�—ó‚†K¿<%¢í}žÈ>ŸmÖ¾¨¤ëºº:ѧ&zNeduψs,ÑŠ–lÉŸ¢iSÉ]MØJç¢ï é5ÂÞ#4Þynƒ©Ã…V-|‰Óð^y±¦™‚»£É�±w´Ð¶þzŠ«ßÀ6·wH÷v¢¡~§[¤c¾•n$¦™eŸŸF\.GÐX{ïŽ0šÌØ^òsÒéï·ãp:‡Î9R\µŠ‰¬]‹Ûíáœ1¼ Bâ„-‘®‹?&œôŸh´ 1=ôdç‚zçéQZÌ(‘åüa?É ç†  ¤ó†‹SP˜bd�w\§Žáo:KÓ‚Eä¾ý ª#žÜ|ÜIIBD*ñ‚0tžP4B­(Õž00LµJ…Ñdæ¶»ÿ‡×ÿ ë�¾¹óY$ ßþÒ&øNÒKhö�Ãé�²óEPCª7õŽùxqêx+hZ[[éºÉ �ì¢cRUè‰DK0(LZ¥’$• µB>ôêÝvCÉ Ž»ÈùÃ~d.ëˆCÄ©ØSËx¼Ðß׃¼ù<�Ê$²öÿ m[‹Ð yÁ"ÚÖ_0¤.„_6ñhB4I¼¶’’4¼WSOÅüÁ…Ãÿòó¨ùÓO)˜“Æ’ëïáû_þܸa/i¼â"òñRu™™âÑ^¼ØNqÁÈî ÄI«¥¨Ø¢&-Á@o¼�d¨8�àø Ô9hKBi2£ê1"³}„­,�´ÃB_+óªò‘âT,ˆS¬,ãÓ�Õ܉ÍéÇwì!µ H6ÝH纫Qõ´àLÏ*BLÀ 0œ„E£ÅFVºpeþAM KrƒMSWTÓÞÝ‹AŸ†T»"<¡Tª#kåÿbj¬T šÄF=.—KT'„hâELàÂqµwz¢ÑR€PqJÕhPÊåBóÖÚÖ_/œxÓÒPÔ9ÈÚ{Yo=סn핞:´æd°ÁêØ4r�%Vs'ò.#&™ ¹ÅLê_þˆè[~9½ó–"ë÷`., vPp' ¿“Çç§ßéœX:.”„Å„…óryäÙ=lþì2~ý»7¹&ÄU×iì%'C(ò_*ãºå2)öZäˆa¬T] v´|ù QÏ•H×M=Q—þ‰FK¡„žPCÅ)pâh[5ÉçÏÒ—¾Ý¡‹ä¾ý7Îi޼L ¤ædÄ©ËÈ„H1 IDATÒEóÇÍ* £n�”ŽŽŽà¿ýg>FÑz†¾‚\ÊdŠÞø3²…‹1V¬@Z:Wj½ó–âNJ¢sÕg‚û:Ü\ÏäE(@Â9u\(…6@·þr¶Þõs.›ŸÇ÷¾¼ š¤šûúƒéºH;ÌT$R)ÞQš~†Å;vP1©:±µ#H¤ë¦ƒ˜Ä¢“�–B 'Nj…k~Ö|A üýýسrÐt¶#³ºH;\KÖÞ#ô¬œ‡éŠ•ƒ£ÖS…5DnÜt·÷`® i©Â‰ š*8f‹9øo�Ö‹áäItMMX‹Šè-,¡øÝ¿ï^v%æ…‹ñ&ɃꌃI¸ãÆ"!D1#´ÃÀ½;n²  ¨ �š?=¼­T',Æ‘"&UPVVÑóNuºÑ|&£�EöþÅôÝŽF´ÊhâäNJ¢åÚ›‚�¥]8@ú‘sô^¾„”ç�õö`[¸ =ÉU½¸s„¶,]t!1IéníAn“‰¨€èøl½È-fŒj ž”$´çÛPYzp¦a+Ë#ýø~Ò�œ£¯t7~:Xò¨´ôT¬ F<¶ÂÒD1Ž„…;æDÒaÀér�züí e 0o¾†ªÇˆ:Ý@Ó¶›ƒéCj î®¯ fi¿¿=™¦M7GÁoÙõ4\(�6?‰Ñ”É‚N¯Çñ‚Ñ™ŒÓ=ùh`¼T�Äa'Õë�F2)ud#FLž)‹Gé hFL oaPœ‚m )ç>Â+ÓA[*ö¬¹¨zŒ¸ôiЮC:Ð Xi2C[*)µgPØúPõé©XKÖá÷‚¯U¿pqp­”ÒdÆoOÆž5kQ»’¦M7’ÜÕD_¦p»qÛv`Њ0#€ýx¼ÞØ  šŽD$4¸€”7Þ?ŽÍîD¥T Q)ÑjTÁÖAYzM°†Ë£3¿{dÇùñRu E¿N]]­¨¡w ¢Ï”'H„ˆDM F§žŠµÁm:ú¸ ­W_‡¢¿?(>¿ IŸ9Á4nÛŽ¶¹�~CÀˆµ>ÃSlÁ¿ ïSñ�Dgø$Bû”†óÔ5¶ÓowÒo ô½6;v‡›ìô^xè›8œâ§w^jÈäÆKÕ¢#±]κé¨ÍF"uŒNë»>Õ⤔þºr™,˜âƒ¡¢á‰®·CÓjÃ×û¢œ.�…x¼ÞèÆ"aÕŽ_Üý@ßøûωÚ\©¼tŠHßÄg ‰qÕAdF†óç›ÑÑ47—¡â„QŽ¿[çMqš Z¥rêÄE ‰(hÆÒßoçÑ÷QßÔŽR!'I­¤¬8‡í7]‰ÇíB#›]ƒøb�˜T]¤‹`ëêjÑÑ4ŸŸ|ƒÉ‚.á'·S˜^«Œ|8W4‰ 1Rº!³IEÛàû“£øgØú™¼÷IúlvŽ}ÒÄš¥óù ¦Žþ�+}¯×‹d–M†�bRu ~,$š¨ÆñÿÉ7x�d[…“oE[\ˆÓ”¡t ¶ìÜÎAJÐŒçlK'?þÆMd’ùâ–µ¼ö›ï°¿¦nºkÆÐÝ‹Äæ]WWKqÁœÉV‚0¨âÍömÂÖ�¢èØ›Vi¸K‚d­P#RÈe›¦Þñ�b³ ›ÍŠ!5²Qn·‡Únó˜ÛLd¬Õj%7» ¢cI0>ÒXè‹7f…8]–ìÖNSøü‘]UÅn×Hk²l˜]ùï·®£¿ßÎ×ÿþs,¹é'xÜýñ?ºœ¾ãˆçˆ­bÐ( ÆBîE5¢;€\ĉD.“N*½Ø{þCæGÐÝÜ+ÓˆZ —Ö"X÷8cÚ‡ã¥]“Û+EFä.O�sdÆÊæ¾Ãö×™ÍhA %ÖŽ½¨‘ˆ‚(.*õ1�':¬ÑÄG×luòjpœÞÞ~Ó•\½v-o?4dÛÂÒË0§ �`iÈ ´ùœ Õ¼tôm¬VñŸQŸ×ƒÇ+þ”ÔÕzqvl€³Ž\ =F²”‚•Øéó#ñŒ<*•ʈÁº\.Î6¶ˆ>Ž©@¬C©TÒx¾mÌmt:]4iB”—•‹¶ÜÃ,¤P¢æØ[«Jû„!Q \!_bÐX\JÝÞ¬!‚´·úc¾ûàsÔ6¶c>ô8oV‚Z)gÓ§— Õ͹d:LûÛ€Þ¦Ñ7H)B’;¸~pó€Æ�Fìv{D'ºÑ0 ¬Y³vü ã”HL3�Y)HC0x�Bš†åÁûDŸ@À£óÝŸã�gÈö{KR’†ù™<öâ>6}z n‰Ž8‹éc†ÄÚ2ú<¤¤,$¹kyê©§xâ‰'ÈÈÈ »»›uëÖñ©O} »ÝÎ׿þõ˜[MÍQ.^¼ÈæÍ[DïÓÚÚÊÍ7ߌN§ÃjµróÍ7³tÙRv{DÏÊë¯ïÆf맪ªjBûÏ4f¿ '!DqÉùó°{·PûؼÙO¡øN/q�Âo žx�&3…¹™C&ÃÊd lý#kO³wW=rߣ' Ùûö^^x᪫«ƒw×ÔåøñCn¿óλ,]¶” ë7PW' î ¤ìö¾½7xÿîݯ£×ëÙ¾};uuµ¼õÖ^ŠŠ ƒbñúë»éèèdɒżñÆ_¹páB0‚2�¼õÖ[,Y²˜²²rŒF¡ÎX»TVVÎÃ?ÌwÜÁöíÛƒÇ÷ƒü›M0¬”– G�?AIÉ�Ž Ç>iÂëdêágÿÂËãpd4‘õ5Œù¸D—ÇÿðGî¸ãŽ!÷/_¾�N‡Ãá`ïÛ{¹ûî²tÙR{ô1víÚÅ[oíeÿþ€±<òð#TWà+_¹�¥Ë–¢Ó騵kßøÆ7)**dß¾wxà�¸ï¾û8xðÙÙY?~‚ .ÐÝÝÍéÓµTW`óæÍX­Vî½÷>žzê)^~ùe®¼òJÞ~{_°Î–““Þ={¨®><Þ€Ùlý¼õÖ^¶m«Âjµröì9¾ñ�o²tÙR>Ì<@uõî¾û‡¬_'Ožä¾ûî###ƒÂÂB*+WGóí�[‚” jHìoZ··Ù µ5 §<þïÿÈ�ÿö[þºÿ•w¢TȃF‡K‰klë6@ÇÅ‹¤g¤ã·wSSs”­[·²fÍš <óô3üä'ÿΆõعó~~øá°ÏóÜsϳó��lX¿�ªª*öíÛÇ•W^ ÀUW]É‹/¾ˆÝnÇn·SZZÊöí۹ꪫ¨¬¬dûöí<÷ÜóÜqÇ,Y²˜ï}ï»<ñÄ\wÝuÜsÏ=Á:Î÷¿ÿ}®½öZzèaææÎá׿þ5W]u¥¥¥TUU¡Ñh¸îºëؾ}{ðzº{Xµj/¾ø"Ï=÷<•••´´\ ¸¸˜W^y…E‹‘““3ëjE£qé¥ìÄ ¿fâvíâb?§N Z]äçGã¨â £ÉÌésmþÃý8].TÊKc\y(þ¶ãoÌ+)¡öt-Öo`ùò ^{í5/ì)ép8P¼™™Y#ö¸­V+i!6ðîînJKK±ÙúxðÁŸ²yóvíÚÅÎ�`6›¹í¶Û†lÿÉ'Ÿ`2 ËQ[ZÚÈzéöíÛÙ¾};F£‘ÅŸâ¡G~9äñÀ>V«µZ�V+¬Ãzø‘‡yæég(--%=#�ôŒtü1ZZ.ˆz¯f ‰)AÔð§D¶.”ùó‡Þ>{vâÑV¼³k�P¹ÅÛY7€»«ž;îø*�?þ855GÁ]gìî1ºöÚkyòÉßðè£�²qãFÊ–³gÏŒF#ÿû¿¿`ëÖ­üìgÿ�Ñh¤µµ•k¯½–�>úˆªª*ªªª(--¥®®–ªª*žþyjk…:T{{;•••€}ÿûßçšk® k¥®®>@ë@hߨ(Ì@Ój“hh™žÜºu+dóæ-lÞ¼…´ÔÔà}Ë–.cÙÒe¤g¤sðàÁ`ml¶“ˆ�Ä%% “A`Í^O�0ÛÐ}•’ÿzú/¬^\¼¿07ƒüœôi<²)ââQ›Éú(+û<øÃ.y俹ûî’––ÆC�ü’’’ydgg±yóL&Û¶m£¼¼œûï¿€�Ž}Ä·¿ýmn½õŠ‹‹ƒ†�;3ŒŒ xàt:Û¶m`Û¶mÁúÀ#�<ÌæÍ[Ø·oÛ¶mãñÇçÑGeëÖ­Üpà �tÝôÛí|ç;ßÁl63gÎ^ym7Ë—¯ààÁCìØ±ƒ-[6÷ Ó¶mÛP«ÕÜzë-Áû¾ýío£Ó騲e3›7o¡¹©™?þñOìØ±cÖ/ wª(˜›ãz¬é·S~0 f8F9˼‹&¼Æè… ±qð#¹aƒŸÕµÜ€«)žm«Ìò1ÙÒîàíM_ý ¹™L‚F%DI[×/ç‹[ÖâW¦aN«õ5fü ©þEüc¹ëBð+Ó�Îû|Œ(ÁTPT�Çù í7v àÇòo;àHDH ¦œŽŽ›1ȇ^iü)˜»2ð Œ_xï='Ú¤ÎI½–"f ¹Ï~HöüÁ>i ¹œ×ûAðößœäè©F>ùøŠó†îÒŽ¨­UX`ëèˆà§3‚Ï;¸ÌÁïóã�b[&¹LŠT&þRä:<Äî>¦Ž&ºÝ£§ª"éUg4ƒi´PÄv1Ðé’PÈ|¸½ƒ•Ž@�*Ät¿Ðét¢~¿ººÚ)¹X“I„ïªD:2†‰ä30 AJ5¤ˆìR¢O‘“›3´™er–”ãuºàš{¿–ìLjõÌímp±QøšMfšÛ͘ûl>q—Ûƒ×ëãÕ·?ä²R¡ë€J!gÎ �àðê‡kdl:‘ïôá’YÂ>¶iUd6h1cÉÃõxs{¥(d>äJ —�´=¯â+/§¿L¨ñÈp†íÊð¾€™†”ñ�·¡iÜm@·²Ò¢Y3Ãivü fÉÉ>23½tv _`Ÿ›ä,,ŸãFÞØÿ ¿{íÎwðÓÇ_¦ë r3øÒß­›æ£›<�F«Š0 Wý=§!9Wôsµ··ãʹ¿z°a ‹÷ªÒù£í–êê”ç�{Ò÷¸�Êh“õØ?iBÒÚŒ0¬Ù€­Ï„B:}}âf# AJ0=È’ÃÞ]2Ï$€³gg� }qËZ¾¸e-ï>ÍgW-œîÙ2ºÏB~nFDûÔöªð§�lŽ[œšQ-ÐIA£VEôúá�è3ðg�´˜OÓÙ85$)A\1¯ØCõ¡Á“GS³¯WpàÍL}ý¬Úv&‹ Ç@‰çŸn½’~íï¦÷Àb„ãB ªy9¢·ïììÄ•³fÈ}�qä‘Ô�Z[[qÚû).š+zŸ±PçäÓ÷��œ?‚4ÛHR‚¸bÎ/É:}V!íãtJh¹ §¨pöô üçÿø¯=öÏ”‡9IË#œ°ï´Ÿ~�‚9‘ÕŽL^üÅ#Su‘v+8¾yܺQ$ô™;Q½ôœ‹–¢Z?)V�×;kjH‰…± â ‰ŠŠ†ŠOcãìø²ÈÏI+F³�ÞÎfÒé$)Iü\*£ÉL_Î#î�UÝ(äm�´6#9ùQÔž3„ºþf:³ç7I0k(-*Hgf¶ y|C­²KÊ ÙùèK|PSüi:?»š÷¹ÝçöF쬫í´�02dÊdÓV7 %kHÀ„¦¼Æ+3û›ž`VRPàA.÷ãñ'ò¾>)]ÝR23fG ð‹]&š/rôÔ¹ Óîêu‹Ø^0ù�sñBÇ‘(ŸW0þ†!Mf¬yKFÜ_\¿íÿgïÍ㛪óýÿg¶6mÒ&-]i¡-[QvP¡¤ `ÁeÆËÀÌ0¨à‚÷ªàw®W½?eÀ;"®PÔQ§ Ž㊠#”ʪ´ØÒ…®´MÒ6i’&M~¤9mº¦{ y>}@NÎòiÚž×yïÝr>ƒAÏ…‹ŽÑ S]Þ›2e2ïþýmæÏO&!a*iiÇ a×®]lÙò k×¶ìöíïÖRÿýí÷â‘t¶Ówc¾-ñãªIŠe€ ¹È‚X¤A,Ò�›{¿ºªnXeßâ#“r8í'áõ_S>ãÆaÝS¼ÙW\Í9ËÐAëÆŽAų\2뜴4t¯%233ˆŠèùþB éÔ±.�Çb±RTª¡_¦ºX�iiÇÙºu+ßÿpŠ-[ÿ¿x1ƒ… ÑÑëõ:t�„„fÏžÍÎ�;…sôgk©ÿ:æ½\T[Äü¿Ó 7“Ÿu>œ®p¸¸ÂÕ ¹ÒÐ%7O�ÕjY³Óô+vþ¿•üî¿^æR^)ó¦�açSËÚ9ʳ±•žE۱̶š#§õC7i$2 ‰ÝŽi4†ëе;ƒ3†@'“*5Z ;ññ#Ñh4ìÞ½›nIBÂT¶mÛFVVóç'³bÅJöíK%11QØ>zôhÀážŒŽŽfÉÜLJÿü˜Y·ÏbÙ²eL™2Ù%þä¼FYÙUTJ Ïo3ä$/}Ji��m\cb‘�0¹•·ç”rðýXªª dµŠÈ½âCôˆ¾Xi÷1rH$G÷>‰ÉÜ�5(÷íÞš™ÞÄ`Ьòïðq' Lˆc‡¶ø^Ì@÷Ä­°°°×fDu%†d±XÉÉ/ÆJ:t�-[¶²~ýza û AƒØ°a7n$11‘åËW�––ÆìÙ³¹øÓyfΜ ÀÙ³çÐét¼þÆn>ý×§=r”ððp²³/III± LiiÇINžOff…%žŸ‰ç¹+ór]î/bFXÈ�xµ•IÌÌŠtµ‡«&½‘õËeß~+HÿñèßøäÈ�Èd2¤b2™©Ì1¯éîÛÇñ·Í÷÷ñ ;GUþ� ï`"ÃéŸs©�žÕêûQQîÕduw{ ¶èlRQ©�FC|üH‚ƒƒÑh4lÙ²•´´4—ý/^̃>ÈÂE ™uû,†ÎîÝ»ùòË/]ö7n,99ŽùY/¼ðiiÇyôÑ ÄÅűpáByã�7ùÃ~Ï–-[INžO|üH ÉÌÊ%np„ÇZK^AòÒ§Èlì¾µÜe[ãrCâ ’ˆËy¾Ì°[õÄ»·O"ûÊU&Ü˲;§1mR|_/©[¨ÓæA�ûÉ ¹ù…\�n9nÔ4 ?y¯=ñw´Éh2“›[€*(È%iáô™ÓŒ?¾Åc²²²ˆŽŠâðׇ¹ë®»7n¬ð^ff¡¡aLšt“&ÝÄ¢E‹¸rå ÷Ýw)){‹ à©§žbíÚ‡IIÙ#ETT™™\-+ :*Âã¬%ÏZ�—G\j@V?äÒÒ›¬IfSpßDGðõµa6;òot9%%6"#݃íI8ÇO|—žÉÛŸ|ǣϽÃÓÇó§ßÎêTª´§ —ºŸù¨ÑêøÉç$mˆ‘ª…Ay-QVv•°ÐÞûÜÜ�!Ùm6ŠËtèõzn™Ò<{0:*Š3gš×2effðÜsϲvíÃŒ7Ž^xp¸%óóóˆAQa>99—™4é&öíÛÇ¡C9sæ4¹¹y¬ZµJ8Wyy9 .äàÁC;vœ•+W ïy²µä¤ë å¹|óÛ*êÜ8dó`9úè®gØ5E"±£'ãRÔÍË9Òþ%H×øÐ´IñL¼a0o}rŒÍ;ö‘”0ši“ú§ U]Í#,ÄýNqy’˜Ö[ É}°Ü¿¾O/ލw'†d0èÉÉ/aðà˜Vk¨âãG¢T*Ù½{·‹PlÜø/¼ð¼‹‹.=ýJ¥’QñC‰Å(J ½£8~$ÉÉó8tè båÊ•:t�¬¬,Ö­{„Y3g°â÷«˜={6/½ô7aM�­¥rM#Â<ÂZêûx¹îÐU6Tò×ZEXìm×� ÚD�.KIœÚ?Û�þ9—Wþq˜Ó?çrÏ웹ôéÿök먺ô†ºïz»joy0£“p¥?%�{(ê)luŽ‘mÅ�,+…%XêlÍjŠZ"%%…yóæñóÏ?Ç?ÿùOV­Z%Fff•Z-±±ÑÍšÄ*Jâ‡ÅºXKÉÉó)-½Êƒ>È»›ï8Åòå+øøÀA!ÁaãÆ�”––òÜsÏ 1:çõÒÓOÜçÖ’W�¼t"“û��[CCøüö2àê&lÜÝÎn³û3b±c¤9ÀÕ2 ÕÕbúW‘즩ìþà(Kæ'ò_«`®µòÙ±Ÿ bVÂ($ýl¡ÄP¡îeÄY,jchë;Tɤ”tÏÒº•jÝUÄ™ F†j­ TM“Ü!**ŠsçΑššŠ^¯çÿø‡plZÚq‚ƒƒ¹adˈà·3h `-%$LeåÊ•¬\¹’…‹²ÿ$%% btèÐAž|òIÊÊ®²páB!Ö”��Àþýû™4é&�ˆ-yÉKŸ(39̽ºl?yQkÈ/PáÌfÈΖ2~|mO.±Û:(Œ7ß@Q©†ýŸ�ÄßÏi}Ÿ»1#1+aàážêÇÖ�Øm6¾î?„”——#UŒ¤µ„ArŸÝõz=¡Á�íïØMØê,Të® ¯-+Ù9ùªÔnYE-±xñbáÿ™™èõzâ‡Åºý98­¥sg~Ä×ÏŸøø‘̺ݑ½èü7!!�… ’’²—)S¦ÇnÛ¶�¤¤$kI£Ñ�“s¹Ï¬%¯ ]gÔ©eÐf ©w¨Öj¨²¶bá4J³³Ôš�ŠE¨ è3±ã0œúÑDЀ2—Ãlu ç³Ô¹o=Ùê\7ì6ÇõëìÝ3½Uf4þ¬¼w+ï�Ñæ¾R™?e^îÔu$""qƒ@ˆ%íÿyË$âú}›  ¬�øLÅÕbn q¿;C‰Ö І>uÍ�û`0èÝ>@m­‰ÚZ¨Ã™¤õŸ¹´ –§´þ³q>$8“ª*u 6¢ËuP�“†wld8¬¥¸Øh—Ø’SŒ 6l`Ñ¢EÌŸï¨KÚ¿¿Kê¹³ˆÖiUeffث֒W�¼ô:ñ#â)--mõ}™¬i+†ÁLôsîBC¬¢ªZIh˜?2™½× #;ÏTìzÇ>«Ñ€´âT«{…Ç’0¤sOÛÝ…FÓ~ Çh4¢U#³9~VvŸ†8˜¨¶ånßá£g£h+†dwÌöq÷çI¥¾>e”ŽYËz}Ç„¯¥k»Ûøµ-ÒÓOáë#í�UÔNk© ?—²²«ÂúÖ­[Ç¢E‹�Ëå°oß>x饿 Çþú0¬~€ñãÇc2™Ø»w/ññ#IK;Þ«™x^AòÒ#<ðÀ;Ö¼çWtt4Ÿ~úi‡{ÞCT”ˆŠŠ†m�/7ÜÐÕ•v7ndæÌBeü-7ßDNn>ÁÁÁ¼¼÷Ÿèt:ž|t5øM@¤/Ân³`•… õS8Äʯã“ÖvîÜÉš5k°ÛíÔÔÔ`41›ÍÔÕÕaµ:¬?©TŠD"Á××öìÙÃ?ÿéè0>cÆ 6mÚÄá¯3ëöYn ‚¥Ì ’È!l—ó 2dä}Ñl_‘DNÔð›;ü½µ…»Å³žHff�¦ÛoöM­¥Æ±¥­[·²yó&ÁU׸ÍPÊž¶nÝÊâÅ‹IK;Îo~ó¾üòK¦’ž~ŠÚÚ¡£„;4ö:8=îà$/=Â+¯¼"üÞ¼y|úé§Âÿ;ËСv**\R}$"#ÃNP à­à`ðëZ½e§¹å–[8xðÉÉó9vì8·MŸÉW_}ÅâÅ‹9öÝw<ü§‡¹”_ÎÁƒ‡ båÊ•ˆ€o¿>ŒÉhÄ`¨!))‰îÞ ÀÝwßMpp0©©©@C¼!33ƒ³gÏîÝÞ¸ IDAT1tèÌf3~ø!ãÇ�G,#•J)..B&ó!¤Þ�f2™‰DèõzÔj5ÅÅEœ;wŽ7ß|µZÍ¥K™dff°cûWO{ÈBG@¨£mFQa!ë†`�žš‹PÓo±+"臵ÌÝŽF£F¬�¾¡çúïµ[Ú´iàH/?pà€Ëþ ,`ûöí,^¼˜„„©¤¤¤ïµ6Ÿ©'ðüÈ©—~ƒ´¶ùóMii)ÂkwÜA­ßBcƒ‹E?.âÀ{÷ŠØ¾Ýñ•’ ÇŽÁO?Aq1ÔöpDRR’`9r„'Ÿ|‚#GŽðéS³hÑbÆOOqq1Ë–-#33ƒû—þ–ÜÜ< ’““Q*•(•Êú'Üôz=W®\aÑ¢Eþú°0zàÀ�ƒœ?�áÇsá =|ðEEÅüôÓO|óÍ7H¥RRRøæ›oÐh4DGGãçïOHHyyydffâï¯àƒ>äÌ�§X¶l©©©$$$°`Á6nÜÈÆ�™={6 ‚8>õÔSÌž=›Ù³g“ššJJJ §Ó`Ù²eKû¡Ùg#RvÿHñþFff99—‰ËÀðžw3;­%•Ò‡´´ã:ÜÆ�ÅÈù÷¸xñbæÏŸÏ‚ €î±>333xðÁ;tŒ×BòÒc¤¦¦²mÛ6Ggâ%KÐjµBƒÈÎàî߈ÑF£ˆ¢¢æï)ì°ªœ•ÓÂ’vñ¯!88…B�F£¡¤¤„„„©üå/Ï’™™AHHÇŽ9\!³nŸ%ô*¸aÔÖ¬YÃîÝ»IJJ,¡ÔÔT† FLl 1±1ìÝ»—Šò  aÞ¼y˜Íf X°`ééé„„„pÛm·ðꫯb6›Q*•¬X±BXçØ1c),($%%•JÅÍ7ßÌ„ Xp×=<ÿüó\Á`0�––Æá¯³ß~¡X3!!�!ÈÍÍuÙ–’²‡'NðöÛo;âeš‹®N`l×>Ü~Œ3i!88˜C;ž´ÐU„ØRa z}µKìë‘Gᡇ$!a*›6m"z`………Ý"Hññ#9ðñGìÚµËíc¼‚t�a“÷œQl©nð/Y²„ÀÀ@Þzû-âGÄóÅޛם~5»Óç‹áw¿³ó¯‰(/oÿ–0À`qåŠëv‘ (Èî"T!! R�»IZ‰‰‰ìÙ³‡aÃî˜èèh¡&Äh4"—7Ï\S« F£Qø?@Y™#‹0/×Ñ®fݺuÜvÛm�FÒÒNP^^ÎâÅ‹„Ú¥êêj®^½Ê·ß~ ÀСC±Zë k^È9oÞ<æÍ›Gii Û·mcéïî'""‚ŒŒ ¬V+ñõæè™Óg8sæ Ë–9Æc(•JN¤� ++KØŽ$á{+øÆåZvõuë®KO?…L"î–¤…®à´–*5ZÒÒŽ3xp QQQ¼øâ‹üæ7¿aذa;vŒÒ²ræÍ›Çºuë\ºHt– “n&=½õ$ž¦xé:Ãæ×s…—²€†_§wß}€'O�y)³KBÔ˜èhøãí PQZ­ã_�t:ÐhDX;Ñ~Ïn‡ª*¨ª‘—çúžX �� –Õ€–JåxßÉÌ™3X½êüÏ–¿Ô¿žÉ£ëþÄÞwþNtTË—¯`Åïþƒ´ïb<>õ7ª¤¤YŽ÷W¬ 88˜‰'ðÎ;ïðâ‹/¢V«9vì;~úé'&L˜@RR)))”••SSSÀàÁƒùé§Ÿ¸óÎ;…õ”–6/3­©©Áßß1."<<ev»»ÝŽT*åêÕ«„‡‡c³Ù4hãÇ�wyÊMMuÌéqöZ\Fj‹NÅVþ³�m'’º ¿VhœÊÝ×Ý£ Â? €œü"ÁZr$/$�˜˜È¾}©ÄÇ�dÁ‚$&Nír&áܹsùì³ÏÝÞß+H^º «Oƒ|ñÅ—lØð(‰‰‰äÕßá�‰ Ý�BáøÜÄb·Û©®v”ë—ˆÊJp³o§ 6›CìtºæÏù‰C”‚ƒ–Udä|fÏy�ÄÄyØí‹iÁ]÷ÉOÿùÏ<òèÂþýû˜?7 »±œøø‘<ýç?³zõjü¿Ø¼y<ðÁÁÁÜxã� 1œ?ü€ˆˆ&MšDaa!¯½öIIIŒ5Š;vàïï�R©dÖ¬Û0`€ËšKJJØ·o¾¾¾˜Ífn¼ñFÆŒ÷ß~ËG}ÄØ±c‰ŠŠâòåË,\¸�°hÑ"BBBÐëõ¼ýöÛìÛ·�•+î'x@(šŠ2vïÙKAA>ø Ý/£:>2èš¡iÿ9OC&“€ÁÒ�ý6lØ0—‡Ž3ft)Þë$)iV«ãÖ[¢%KZ68:²ö•Ü7»¼/ž‡o–�Àoº¿W˜y°CH³'9,¡Æ™uÏ>û,“&ÝÔm–Rg°Ù ²Ò!PNËJ«uˆUUUCk¢îB*u•Z *i1¡E…2(…,e—�Ùõ`«Ãn³€µBÇ#òk(6µÛíäääPZZJHH EÇÓÂ;ƒ^¯G£ÑÆ�!CÐh4�F—ØBÁåL ;#‡k.¸œIx€IuVC=’¢ÁI½²î¾Ä™Ê=4nP³þsž‚Ýf#¿°™�œøø‘þú0;¶ïàtú ЉcÕªUsðàÁfóš:Ëðáñ˜kÈ/(¾05õ_†Fÿ7&¯…ä¥OÐ×·`QÖ÷kúºJS‚�ÙB�R‰" S±#ècñsü¡Ë-:L:À9~ Ìqó³ pÜeŽ “1À©D‚_Y â#–èÁ( Z›@;:±D†2ÿ •º:²¤ƒ0˜|©ÍÖ ­Q(�À¦±`¯©Á¨F$‘a±XÚýþœûƒÈRÍàè=þr c‡•3~äU‚:gÔ\ü˜Ÿ­£K¤(•Jt:�•*½¾½PÚ9|}ÝïŽíççÇ•+W°X,„††âçç'<5Ô•%½R°_†Zv5ªA\gZÙ­µ×| ÉÙ®'S¹»ŠÑd&;çŠ?Òh4ìß·¹\Îú �ñÊ+¯ðÃ?0lØ0æÏŸ�F£é–¢óûî»�·÷îvk_¯…t�Ñ“’>:œ_�úÐà²3f Z­hpÙ•––¢«Ô¡VµÜåÚÚN¨i‹·ÚÂH:?¦Àç‡4*¿=Cyâ½”Ë"(/�V„N'¦¦¦Á%#jej IWŒª•Ú(vbV1aäUF Ö¢«Ôb<955Fró® •ÉjÔ¼Î&BLû�2›ÕÕ?i®ëx+¤ÊÊJÌæZ"##ðm4f½:ë0“†¶Ý¥ÝIqq1çÓZ}?´ÑÏÏVgÅêfÇlGÁfïö3lZª«¬$À߿Ůܞ„³lãÏ5=ý·ÏœÁÏ3‰ŠŠ¢°°�yóæqôèÑnï~;8Êk!yé;~õ«Ù|õÕWääæDüˆ†""g—†ððpjª+šk§wƒàŠ€vn¬s’±O¾™(—NÏŽa­E„V#F«SY)¦B#¦R'F«ct£û¹9E*rŠTø×™Ë ÁbÂÂ$”UT ‹ Ђع!ÂMî��©VøST\‚­®–Ȱa……»ù¶66HîÈ0כ߅‹YnŸ·¯³×<çX _?AŒ6nÜȱcÇˆŽŽæÿýùi¶lÙ®]»ˆŠŠbóæÍlß¾�gžy¦Ù¹œuL�éªÅÞïOò:Õúäçç3eò¡©ªZDvv6µÑQˆÍ} ï µªPÇ·Ñã×2ZlØìv|}}‹í leÐ +ºJ1W¤”–‰±·`5UW‹¹xQÌçõ×w0fÌA¦N½• ôzÈχӧà±ÿ¼__93¦·^Ô>>2lv;F“©ý�;€Å&E&îÞ¤šëƒAON~‰�EçdâÄ Â`½ÿþï§Ù¾ãÿxë­·yë­·Ù¼yÉÉó]ÎãtÑõE'ò¦xÉK�0fÌ!~´gÏ4 Ÿ|òI¯ªs AõÚ�=CjŠ¥‹‹ÜB�ÚF�º–øZ…… ‹$�®V“Õj!%å&Lø”Å‹G��àVxåŠc&”�ÏÍœ8ñ)�?~ÿþö£FÅ·�³«x·£Ö™@ì½u„¦.ºÆ$$Le÷îÝ|úé§8p€C‡Â<àÒúÉÀz ¼t+¥¥¥„‡‡óë{ @\l+V¬`pÌ`¡ VZ¦Áæ×:@ªµÈ>ûSÌä îOTí VHd­7äôñ±g%6ÖJ…FBÁ åìvÈÈ<†H4”[nqˆÑ-·8Ž €šGリ˜œ>=”ãÇÓ˜>ý¶¯O,cëî¦]ÀZWw]ÆZ,V²sò T©Ûœäš˜8•×_�eË–¡ÓéZÌ¢ó]S0â¶Û¦ñ×翞¸‡Ü找Ån¿Ä__ØÄm·u¼  ¶Ö‚X$BÞÝ‚d°Ðoö"ºÊÊNÏ%ÊÌÌÀRkòØ1ê­qMR[n¸n§%�RÉLíŽg¸ž3˜   ¡).6ŽÛ»èzè+A~ÿû^¹–¯dH1uR�fÏžÅôé·’žþ#Ù—s:d9“&Ml6`®#M&|||ðóë^÷šV„cÒl'°Ô‰;5çÉÓ±X¬Dw"fälÿ3(|ªðÎ~ª}G¿¤nµ‚ºB­Ì!NB^�ªgÊä)Lž^Éõƒ^ïþ=£/;tw'ž+HΔlO°‚:K î=Qˆöº´œt•:áÿJuÕøcóìQ1ˆ ó�Èz^ üüä(üýÐUV!ïùTsw¨ªªFáïßíî:/]'-í¸Gµÿé %HýÆ ê,µ2ìEaËé·šîºë.î¼óNöìÙCPPçÏŸgÿûv¨íµHN, —`«³P_+–È„:¥îF$2€Ü¼+˜Ìfä}ÜÝh2Q[[ËÀÈð™ë�‰Ôu®1‚¾¤kÁ ê N·^½øŠF”õñ‚ºŸððpNž<Ùꀾ*«�H@,iÞ„Æîf‘ž„–�\øIÞe É {¥Sƒ*0€€%�–Ȉžw°Ûíh4Z”JT�ÍÇ­{é9®ÇyO½.He5Jáî“5Õ_Ë~a`C2Ä5b5�8y‚UX%¼ÎÍÉfÍÚ?5Kûö𬠹¡ZÛâöºó?àsUƒ¥¤ zA�D"‘ad_ÎC«ÕÜ7íŠ4-‰˜ÈȰ>E/×=/H-LíiZË‚s A_Ym�­¦k@˜¦LžÂùóç…×'NžàÈ×G„׊¼,ôaõî¯ìËØ†:²’¢¬ë+ËËêãO¡jÄ>&‡EY+wôÄ«³8îÎøŽÓrKºþós ”Ï€h¸ªA¦ôÃP­Ål2vùÜíáïçGDx(…E¥øè (•½Û�¶ºZ�Élf`d8þ�LAwïL$/ÐC‚ä1)ÙÐñBÖ`+"ô}'PNaê§IºJ�0f¢1S&Oáéÿ~š'žx€}%Úœ<ð… |‡ iÅ÷�úr&z³�Z…�°óŽ×º!7¸¼®iòZ7äÌ*%á§àê˜xìÒ@áué„›š½Í8@Ùȱ-¾¹|‰:•Šò%¿GdCU z}µÛYP"“ wûË}}ɾRŠD¦.3“¹–˹WP©TneÝY­®ñ9‰ØaÙÔÙZî@ç|¿15FUU•ÈårJË´”–¹ZŽò„}|å~¨ mV™™9ù%�:ÎÇÇÇÅ%¦ÑhÚ=F*#–4Ü2»}.T:R›qér³m�×Úd×ß]±Ä½ße™OÇ`Z²Áeƒ£#k_É}Óí“x”z´¨O¾×þâÎÓH‰Ó z×mÿëvªªª8þ<?ü0üãûx‘}@m%öˇÜÚÕî£F<ä—m6›�Ë—/S^^NPP=Ë©ªªB«ÕÊ�!CZlad7–CÞî�Ð? ÑàÎ�MïI )))ns®PkÇu¥Ñ鵄;B0qüò ŠïŒ@Mý—¡Ñÿ�€©ÓÚ¯­ . od=ÑKÕÝyñ#âY¾b9AAA¨Uê-'/í#‹a(++Ãd2Òí1»ÝNyy9&“‰ˆˆbbb:ÜO¯'Ùºu+jµš5kÖ�ššÊùóç…^‰!=ýk×>ÌÒ¥K;$H‡äĉ“Â5�çQ*•èõzÖ¯_À¸qc‰�Ùáu�ãûêÊñ½Ig[µ†Û‚ä±VPßœ{U ú™05ͬóÒyÄb1qqqøûûSTTDAA!!!�n/Ô£ÑHyy92™ŒØØØ~÷ð�–vœ<ÍĉHH˜*Š;vœÄÄ©h4~üñ4S¦LfÒ¤›xã�7?~<':š—þú03HJšE|üH233P*8vìãÆ�¥ °�Šò  —ë>þø¼ôÒßQÓh4¬^½š+W® Ñh&44Œ´´ãŒ?½¾š³gϹNffYYYŒ?�¨¨(8@Y™#NÚD©;iýñG#Å^ªÄ~)Ô‘Vè¸!ö•ùX_¡UˆF!Qæ‘7dQ¸Þ±¶eZÕ`½u'µ2( tˆŸ‡¡V9úÝ”––òÚk¯QÚÏÆLx2"‘ˆˆˆâããQ«Õ”——SRR‚Édêô9M&ÅÅÅ”——£V«‰��÷h1ºpá©©©¤¦¦òý÷ß°{÷n^~y#oÉ_þò,‡ä�7Þ,—ƒñòË»ˆ��á¿ÿûiRSS]ιsçNRö¤Ãòå+HO?ÅŽ/²páBöïÿ€”=)lÙ²ÕåØaÆñÆo 1°àà`á3½r¥€;^$99™ÜÜ<þùϲqãcèõzÖ®}˜´´ã:t�µk¦´ô* .äðׇ)))áÂ… |õÕáþ4=�V-${‘Tˆ{ˆÔY[OöKõSR»SÐË�œ=ðó çòåË$%%1fÌ–/_!Œ/¿îðQuëé #FŒ@§ÓQRRByy9~~~øùùáë다…ú.pŒ�0›Í�Fjjj‰DNPP�ǧv——— ÖCii)±±±¼þúë¬_¿žŠò f̘Áûïÿ¥RɪU«X¼x1 ‚+mîܹ8p€™3gb4IH˜ÊêÕpôèQ‚ƒƒ1jxï½÷X¿~½p|ZZàhç“““#¬g×®]lÛ¶�µk&77—W^}…øøxæÝ1�Y·ÏâÈ‘#.çÙ²u j• ¥RÉ[o½Í™3g„mëׯgÿ¾ýŒ7N8þzã:5\Ë�I�ůÝ{ó$Q ¶¢ËjȲ{î¹ç„)±~ø6,X2y¹yB\¯¢¼¢Ù:“’’ µ°°�¤¤$ $ü=h4Nœ8Ùâñ×­¦}ï:ØCS=¯a+¨³t›ÕZÕ碗Güˆxáõã�?ÎÙ³g)(( 99™+W¸¼½`Ïx×­ýD9 ÿu¯¦ëxBÚwzú)JJJHNžÏ¶mÛ8qâr¹œuë!;û²KâÀÖ­[9qâjµšuëjˆ¦°qãF233™;w.kÖ¬qÉtÓh4lÚ´‰òòrf̘Ahh¨ »wïæ£�>Âd21lØ06oÞ À–-[¸ùæ›ILœ*¬ãÁ¤  ¹\Î>À¬Ûg ÛÖ­_GtT[¶lE©T²Í¹³ç¼²n"‘¶\?t=Ñ´Kû®]»øþûïÉÊÊâ¹çþ—Í›7u{Ëšk�ÐÐ0†�Å·çλl·$ßIÝß?AnѵrdßÒ¶ 5 ¯õýM”ÂÃÃùôÓOùä“O¨¨¨àÎ;ïäñÇïõuô7Ä×H*vW�J$.�Ô·mÛÆ½÷þš´´4öíÛ‡ÜÏ�mÛ¶õá = £±åQ(ýQ”Z$¯äyô7QÇ8Š™·ÏääÉ“Bµ¼—Ö‘ÉúÞ½çâžK°hê+..v±ˆ¢£¢ÈÊʉ×\LÉÏÏkV{夿‰’ç´òõâýI”xàÖ=²ŽUXÅäÉ“9{ö\¯^ßSI=';®¿ÐxÖÐÌ™3ؼù)233ÈÌÌ`óæ§˜9s¦ð~ÓlÄ둬¬¬kB”¼‚Ô颔yÉ14ïÓO?e̘1œ�x Ç®w-q½» |}¤B‚è¨(t:C‡áàÁCdff Óõ½{É“™qÛ­\úîX¿sßyéÁÓD)~D<çÏŸ¾ójuß¹ú™�o_/¡Ûq¸ìz‡øø‘äææ2iÒMõµŸâþÇa}w×÷k‘þ(J^Aº†ð4QjLüˆxΞ=Ûã×ñÒ;ô´ËÎh4 µG�Fh‚ºaÃöíÛ'Œ�h­(Ô‹ƒ 3§õ+Qò Ò5†(\ßÐìÖ]ºS”ê‹ËJ‹Xºt©ð•��À´iÓ„ÝÄ8š¨¶ôu­a·w컲Ûï@vß,òžOñ Ò5Š'ˆÒ3[¶º¸é¦L™Â믿Þ-çöÒ�ûÊ FŸÉl&HÝpÓÌÎÎfÓ¦M-Ϊ5›{¥Ûw_`2™ºí\NQú"ý7MºÉcEÉë²»†�(ëœû®¤ëú¾þúk¢££]®g1²¸ë~ñ‚^_ƒ¯\î²mÑÂ…¤¦þƒËÙÙ.Û¥Þîèn#‰øÕø œJ?Õªû.2r ‘Æ’vÙõs®M^ïèq÷�W�®q:%Jå]Ž)�5²KÇ_ÏØL�èÀq�`±X©Ðè\¬¡ßÿ~%ëÖ¯ãôé3¬}x-cÇŽÉ�~Þ[XGpW”¢££ûD”¼?Íë€N[J]¥÷Þz“„„î¸ãî¸ãŽëvü„ÄÇ›šì.EÅÄ�¼AxýÄOððÚ‡Ù²e+3fLç_ÿú”sçMz�F#Ry»”xq[”BBBz]”®Mç«—ft%¦D  QDÇF‡†䋯¿¥°¨˜ŠŠ ÆŽMp�·žÞKëTë ˜mv!Ýû§Ÿ.PYYÉñ´4–,Y´i·òùçŸ1mÚ­( t:-A*מA¢Š2¤ÿú ›¢÷ª±Ùa„;¿S”ÚJtˆ‹@Úål† ¶÷dLÉcI�šQUC¨’èÑH+1øšÑá­Îî â0-¶«A%ÊeØ«äNvxaÛ_),,äÊ•+(•J¶nÝÊí×a¦�Dê±f½†¥¶©¯¼Õ÷¥b1Å¥Lštƒ…BAAAÑÑQ¤¦þƒéÓ§£P(Ø»÷-¦M»€ªÊJG5i�Sc¤nÈPêúy›*i]zv�X$âöá#øúßßrËì_µXdÜÛ¢ä±.;%ŽB¸À:%±æ(FU aRÙX¢‰FÍõYñßUìj+â°–Môvé  /3ã"ÿú׿7niii¼ð �»¶—k[µ�¸¸! -ZÀ´i·rðÀAvlßÁÒ¥KIMý111( .gg: �WÝÿËåÌ âØ±ïZ-2Ž‹BHHgùÅe{O¸ï�Õ«W»õ‡uÇóø×¿>m&híí—ž~ŠmÛþ„N§%66Ž-Ooæø‰’Ì�&‚‰È¯ýøÈåìlÁrèmì#â ûã#2›0Ô7M5׋�£Ïüž»ï&<"BxÅ“OnâÉ'=5 >¾¾ýªU�(TE€:ŒÂÂBŽû•JÅ´i·â;Пš¢â6�U«Õ¼úꫬ^½ºÍý† Ê«¯¾Êï—þ–ÚS_âÿ¿%=ýƒ¢Âñ«"‹MJfÆE¦&RÕD�Ä7Žã�wÞaõêÕ¼³Ûq½ö,¥áÆÑ­bÐ’oD68:²ö•Ü7»õBî2©l,rßÞÿ…óÔôr5j”( 3¶l9:…貸ÚK:WrâcaþÍ\sž†£kt:[žy_¹œ÷ߟ{î¾Û­›ûÔ„ާ¥ ©É�i¼Í¹Ÿ“#FðÑG2jÔhÒÓO7„ùÉÉ.ûÔTiðt/X?5!�/¿úªÛo î`·Ü¤/Ò yú¥P¹&©ÕALŸ>�ØØæÌ™Ûî¹ ¹pá|»ûY Íݦ}�LáÏœ9sIMý;¶ïàÞ… 1›Mœ™ˆNZrûu)®äÁøùù¡m¥—ÓЉ‰ö¹wáB¦&$Ç–gžA©P®=•JŹóÐjµ.–Ԍӛ�{Ñ=óY¼ø7h4Ö®]Ë+¯¼ÒlŸQ£Fs9;­V˪U«êcN±Í¶UVV¢7´ž�ÐÓˆdж‡)JZïÊÐ S9ž–FÚñc¼ýÎßY¶ô·TUWóâ‹/¶øyögœ7ô£G¿aÛ¶¿�••Íà˜X.\¸ÀO<ÁŒÓ™3g.±qC1ŽŽŽâ«¯¾ॗ^@o0�Q_„Þ”¥K—²hÑBÔê žþyA�_÷Â… ^Oºˆ=F�‚Å-ßDû#r_)Xè�ˆ¹ƒÕØ<«É±Í ˜1i T])pª@5�CcÛªÝ~QzJôF®VšÜ&™ŒœÜü>OXh‹àà`ÆŒ-øÚÁ*jl ½óÎ;€Ã�·aÃRSÿÁ Û¶5;_P�???^ýu—?Ô§ÿûi—ý´Õf‚ƒ3iÒ$ÊËËQ6Úßùÿðˆ‚‚‚\žZ ;wîlö$»eËÖ®|ƒÙlÆl6ÌÛïüÝeöQtt4ü1sæÌm7 Ò=z §N�\³/ÓÓO Ö�Á``„ DEEqîÜ9ÒŽã™zw�²…›l\�=ö�=öX« 6 …‚ØØ8tº†îéß}÷ïf×õ$q¶8­´¥óµ•n·¨©u<¹Ú- î6‘¬þµÕˆH{ NÅ`0PZRâ’Z«ÑhÈɹL\Üá:………øùùµ›†Þ#ä�½¦¤Í]2K¬<úÿ½‡NÛrRÍø „Ø8øz½žÃ‡¿B§Õ É%àHÕ÷” :w‰‹All9zô”J%³“’2t(Ÿþ.üÄܹs(((àæ›oaß¾}èõzF�Åœ9s],ù´ãÇ;n<‡äÊ•a¿ƒ~ÈÌ9s8òùçÌœ3‡C‡’œ<Ÿ#Ÿ ¼7ÿ׿nv]çñóýk—ó´„3s°£¸›eç‚4Æ0ÂcãGžÂ•¯¾Â¤íݘ�ÄWB�¹ŽAw& âTTRÁåÚ6f+Y, °Z¸eò”N_×ÐBl¤?¹kZ*dXý�ÛÇІá:¬ÙöŽ“{#ÜTò ¾ºÜÚ·B[É)é$ì�:~É}ìïƒÉlârK–,i5ÈþCÚqâCº6£«/p¥úɽ£Œ–Qmº­ñë*ƒÅ­¡üÜ,‚ÔŽ¹Pîƶ¶–Æ´V¸›¯¯"(,­u5¦_¥}{Ũ}¬¦Þ¿!×™EŒ�-¥�ëkÈÒ´2ÕT&£²¦cO±ßŸ<€Ÿ�#Nå#u¿P{XÅ=ß@NæF«£¢¢bt¯ò¾:ûßTZÖÝR;"‹ÕÑâÇlk»«…­®>îXß±Ájo¿ Æà˜X·n8¾ª ܭФ¢¶ YXƒÐ†úùb2»þ¬cbb¸ãŽyÜu×ÝÄÆÆ@ÂÔÄRú Λ{ ÍoòM·9_[êêÐÕYÝú9•¢¶4ü\[“¦ÛZZ‹;D+¸˜—‹Z­î‘‡ž>¤h¢ûz ý‚–z©_ó_‘¥?“¥U÷�ÕßßÑâÅÍÙ¸ØÁääæ7¨KkõdÊóÝo‡$’É›Ïùé,+9ùEn?ýjõµ´éh¥±3A’‰Å„øsµLƒ¼Q sÆŒéÄÆÆ¢×ë9zô*++‰yC�¦{q±HÄ €@Î�=Ó#©ø}>~"ÌèÑÆ ÷ zq+Í6‡´ýtTÙ�‹¡áQ©T­6[½Þ°[ú¦pN~‘0�Ͳ³r©ÐºÿsVÓ`é v¸˜êêê\ZÓ 6œ³gÏrø°£¶fË–-c6›ñ“_?¢d´´áïcåròCÚñn?w«‚4ä‹sHO¶ß¦£+tW#Õk]FfŸ][ÜJß0¹¯”`ÿVš—ÊdhìPVZäöuâGÞ@ee%ÕÕý×5ÓŸÑêª�Ëån'GâØ¡ŸW Ìáž Søâïˆ%5íÀ¾téRîºëN^úÛKÄÆÆ²téoÝ>¿—Þ#P.'R@zú©n=o«‚4<6šYAQŒ>z� Ã§¨+ïä¤Ñ6è©Fª×V7»=÷Ò6:f·e%Ùe2Î\êXªú-“§PPTŠÅÒ7îIOA*îù1M),*2ÝÜ!?/—Ȱ`LV÷G…¨U*Dfq� ¿7R[�àŽÓh4ŒŸ0�9sæ2dèPV¯^-¤?»ÛñÜKï(—îãÛ­¢Ôn )jà@¢C��ŸÎf£‰ E4¬õ–5¡¥©°×ÅÇŽ¡/*Gâ+A$ 5@üBÃQD†ã£nÝuiëôjhól/'r_éÿÏÞ™ÇGUžýûš}K&“Lö� !€†=¨(¨(ˆV´ŠÖ­îKõUé[­¶Ö½¥´¯·¶Zô§X•VPAqdH !d_f&ËìÛï�“™l“d&™,À\|ò!™9sæä<“ó=Ïý|ïûfL‚6¸ÁA&íV³cû¶°w9†lJŽ”3~쉕àîÞbÄP^Yh� EE…¤¤¤âª=JƇø:}|c,Fd²ö÷ju¶ß'$$ðÞ=lØð)&L¤°p?eGŽ„|\'*eÏ7ƒ#m[“¿¡â@ ÙÔ Q«9]=¼PüÙ>ÊãD8'æ"V÷ÏÅjWØãÿìÆp ɪ,µ& -±Dгuø,ÏêÔÞÇ©WƒƒLF#„epHJI§¥Õ&\$‡aaÿdÃårc·ÛC62X,¬–VÒ’Ø]kĪJB_ór7UÝ[Ûû/ho½õ^¾œ?<þ 99�Š»�4Þ†Tú,u0Ð*•˜ÝΈˆR¿\vy†Lò€Æ}5”XŒýš5õ·+lOk+0¨=–ØÑ=7É­á#˜Ã. JYÏ ³2MMMÔ×V…œ,;:7—¢¢BªkêIK=þòNŽ' $[†Â�?1*;ƒ#Í\^/ò¸LM»Ð‡XT×gïn‚0›Í¼öÚë€Pg­kËr?Òý{‘öÐ40¢HeÐvCèëèîë�CåëÊî°�¯ã¬F¥:²žˆš›‘ì݃gÆ™A§ì-å­Í¥Ù¾õ :ô :,­VªÚfMî3&öùºÁ03ø“Fkví¡áÇýH• §Né±~ÛP1ùC‘¢'‡]Wt}üÑ5ªÔÄ™š-I)¡­æçO ¨¨�ºz#ÉIÃP…à$ êXÙ£ !ç“TVV¢T*±x}ÔY„ŸB‰¹±)dARJ»¯�eddPVv„{ï¹€’’âââHLL T"°Ùm(會G3¸Å~eAÓmŠ$ãq‚ÿ¦ÑçBìñá³8ÀçÂçô"ö¸ð™Íøp#r¸™Í¸Ï:>ËA»øRR/œƒøýõ¸§àMî9‰„(E$I£V“gP“Tn,¤Òc§ar.’ÄàY ‘63Ôïêô³ÛæÆmsSñÕ–@Iœ”™gôX³m0ñõ‘¸8’éÉa×ÌR)˜Ž‘”zó>3;‘XF’~èÇîD¦¾±·XVÆ}ùÑ2Æåå°»¶sûöfWh7.I‰:̵eÄ¥p¶UàX¿þÞ{ï]L&3“&N ¹¥¥[ê€JùД„}�~ö)í&î¡Ü›->Ú×X;¦øúÉ?ø1�DH§Ãó³KÏy~q ’O>Gd6ã;®Ûë*JOŒ ÅéBª¶Ãõ=>ç§£ë¾Bª’¢Œ×?ýŒ~5tíhÄñu b£ 2ÞÊÅÙHsƒ_,íw‡0\ä—z�îï¼Zîž(Æ;:ô Doôæ°ëH8çòê%þ½*ôã+(˜Î®];1™Mè´1¨T bcŽƒ.€#›ÝAmmMX‰�~#ÃOõ&\ÞΟ93¡¯#kÔjjŽ|…:áún­È³23™^0=PFÈh4òý÷;°b¨N"êßßèH¸×ŒD ‘ˉd›P徫ÃsáùˆvïGúí¦ 3@¿(†åÜ„A¬ÔГ "A�ñ®°¡.ú»mnZm ´~¸©JQŸûñ IDATŠ:9…”ÓCSñÖ?!ƒrq6îï…;DÅì$\›ë±¯.'æ󻽯qìhè¿D88}È?qãÍãž(FÜvÃêÎ!ÛãEºß…óB) ðŽR3:ô* jU¯…W�V1ú›¼óŽ”k® =d[P0=Ð"Âd6Q]ÛˆÓá@®P T*‰Õ(‰Ñ¨»]àŽW¤ƒ˜®îr¹))-kÝÈodðjT4»»_¼[Ã46ä²9øÃdœv%òë/))©\wÝuüþñßB �åËÿxþDßP0»�¨Ãú®Ø6m yÛX�ñÂ9¸”¡7×ôM›ˆ'5ùº�p]0¿ÛºREiHF¸£ ÂØ|Ó(/ñi=ۉávGÿ<ðn››æ£•¸-­dœ3·×m[ÿXûË¥˜ÞSÿÉy(¯…·ÎÞi?–ªÊ~[¯´‰‘_pd_¸Q®.–_KqÍ“B£·Ó6ý¥·Ž´ý¡Õf㕬¸õ@è¡;Š…j4šN!&¿H9ìvŽ”Wát8HNÒ�È5'·wx�P~Ž”W…µn‚‘!!-•C¦àõ Ã56dêT+£c*äèÜ\Þ_½š)S¦�––ÆÆ�‰ºÎA.®»³AÁÕ›’‘w¹PI„iÐS�\”5´•Æh a‰0‡8…óHZ‰ÛsuR"Êt= µ6´7IOÂuãuHþû!Þqã»­+u¥PÒÒAúy†Ll?R½m%Õ?nÄîXŽ�}€eu’Î(èõù`BÓq²’ø&a¹´Óã§s@ÇŒ�„F/Æ9[‚ì›þ‡ CuØùIPö½Øl´Ú°Ëí8¬þ ¶¿‡À/P£ss)(˜Î™3g!Ë8TR>â’kÅÒá¿»¯«7¢T*ÃZ7*-)A©Tr¤©µÇm| %å =? �Z�¤ò«N�íÚµ“+/æÅW0{öl}ôѰö9jmªmRZ]"œ^_õv1še\µ)…¿ ñB}œ!iÓZQEÝž}”¯ûšŸ}@õwßÓTZÒë=?»qÕ1$û÷v{.;F‹ÏúÍİԲL™ä%¸q­¢rç±5‡_ÇÌîp(GGª’öjtp—´ šÕêÁÝlCVÓ¾>é„Vq©o†8´Y�¾mhû—‘ªÃÎO_N»Ž¼óž’«¯Já`­—ÂèÜ\RSÓ8X|dD‰’O4¼‚ÔÒjÁÜÜVøÄh4b2›°ÊeÝÖ�ºR¡ÊÅf•÷\C6±öö›¸††Þ_½š«®ú9/½$4æ{ï½wÃÚç@IRzÙwYEàkóÂJNO®1ÿ÷cè3À㙀@íê.0=á9ÿê­²!� „8Í•�ÿ¸"�O#Â'¢åév�|³Å'‚Zo•â1´‡{ÄM>aÍ©(²"ë°A°~üQÆ?_Ñ�5¥‰ìK@ÀôúˆˆÒ]wÝÅæÍ›¹úꟳfÍZt:/½ô6›í¤«úÐÒjÁn·‡µnTYYIsSM2Y§R9}¡•J0èbA7�c[‹?:4A²{cøaßn.»lQ·çn¼ñFvîÜ5¤‚Tm“²¼¨ûZQšÊͳnÄ9™ðž{6¢¢CAוz"ì…Ib<¦ó¦clßOv“�QéÉÈåƒW³©=œWÎÑm;AkhoÍÜO§öO—]’Šë£”w¶Wžö¯%H’”�’b[W·;òG#ß®Ã5UŒl�W°v·áÓ´ÏÊ|ñ´›éæ¶|¤0‘($ýÊÓ¹Ý{y>F¥"V ¿¸¥…óçB£¥}6e´Ú@*cÇömddf…åóóÌ3OSVv„}ûöuzìÕW_åöÛog×®�×X+Ú8¿Ý(œäW‹ÅÂþªJ�Éð…!F2±˜S’Ú«²$M¹ŒªkCÝÅÅűqc÷‹ÖáÇ3&2é!¡’¦r3;¹}ÖqŠÎÉi:87k`ËýAbbz04>_¨Ýå{$ÎP_þX¼©¡÷Ð;ºÏ˜Ø!œW1è&ˆNá<{b] ^³·ÝVøNª’†TãN’©Æx*¬H2{¿ã Ç‘×oôbÀ+8çô½Ï|ÂräuA$îߢº;6{“$ÈÊtñУ‚¤±ëòD[upcU%û«*‰s¹ÐÆÅ¡ÓÅ£Óéú\yùåWØ»·³3è¾ûîç©§ž„Ûï¶na\^ΈN²”J^i£äpYØf‘}{[Œrâb:�O…Z‹9.´Ð�ÒyŒ Î=‹ÿôwÝu—]v)ÚØX>üèc6mÜÈÖï¾ ëXJœÌÇʳê†ô=Ot|úÐ $GÄö-3J0AŒ‰çKS%Åe‘Øm¯d¤§3.SKöh+ÊÄzbòãPÆkBÊŸ %\çGyçhloÁ]Ò¾&$IU!Im¿{qíhÄýY}À]ƒ×ÃÈu¶ùfO¯vnq©I©w?Ì ˜1J?ü˜#¯£òë�!¿.¹— jk>sù|áÃÙÚSõ¶ ¢O¡¤I&Ã,a6›8rèßmÝÂ÷;¶QTTHee÷¤ã¬ÌÌnk%�†gŸ}6ðó¤ÉS8X<²{ìHdŠYÖ«Ž•¡ON {ݨ©b”¬Q‘Û]tRr§q¬¦ïöæ>k ¸m¼óáFrssyã�7yò©§ˆ��áó¶ þQN"z›ØÕ‘[ÚDzr š ü…]ÁMqsâ¤T4êTl‡ë{ÌQŠËÏ ë=bþ7û˥؛ËQœ“Šþëóñ9½xµ´—º³sC¹H[¾ÈE8/“!ûÂ�ÈâÁ=QXS’ñ!Ýï›!îÖëþ|bIè%aüm̓bT*6~Ð>{îËüBÂe³ÛC3�¬Õ2.3 ™LŠÍî ¥¥… >%oL^ ö™.^´T‰¿á[FF�†ìQ•”36wÛ”ˆ‡¦ �ÉÜŒ[¬f\Û9 …ÊÊJŽY­a‹‘V*!'^�Ð.¥;!‡îŽ~†&á¸ëDªƒn2Ü=¢ ƒ·�Eé(n3A1$'nÃ5¿5½®î ®$%ñS °”V`7™!=©JÚ¯’8~Á±¯« ä‰Çiz¬â0–æIÁéCºÏ‹¤T˜-ùt¢ˆÔ°ëH¸ùH£c5ÝÄ&A-Ì&o»¯…Xm/³£^¨³Ø¨³ØHÖ¨ÈÐjHNJ 9)�òʺ€ýãÿäÊÅ‹¹áƹøâ‹!Ÿ7&�[o½…·Þz›„„222pØíþXŒ\¡ V£B«C;ˆ­ Ä2%=]¸ƒáuYA^e›ÝAeUmXëFF£QX7 “x¥‚±‰IÈÄ=ÿNá„î|ÆŸÀø[îeˆdB´’¡Éá·y¢Â7œ z Ýo‚h´Z‘ï/’œ¦ääd’‹u/‰͸‰h31îÚrëžP^Ô÷b»Å4Dn¹¨ßa¹P ÷|)R¦§$²³¶½¤“L¡áX…„Q£=h”^ZÃ×£]…);#™ºzcÀüù_°nÝÇ|üñǼ±r%ºx÷Ýw÷ÝwË–- „ïFçæ2:77PÏl6Q~´ ¹B�NCl¬fÄ$†J¸ESAèæîºQ²FEŽVƒñÈ\u‡‘ŠºÏ¢½bY :Å{ ò›�Šê÷BúL ­¢µÇ‹ÃÚ¹–ž×ãêô³ÇÝ]=ÎÞ?l"_=>·•Ó�w§Ö£—¹¨?Ös$e‹‹JG‡¥ ±²ç5S�§ÑÑ=>߯X8V‘KŠ­É�;Q�OÕšy„ˆ�¯ƒAÆZ_Š£b•]®äb_30°æ–G35ÛÞìu›¾ ‡›älkYvfšó•²×ÂÚQ8ø†"§I—‡;¶=k\¦énbh1·/^ÆêºÏÞZÌu(eÝϸÝåíõ5µ;vÒ|4´»ÎÔ‚©Ý«Ùµ'¤×gÍè³�yOÔ´Z1Ú]ˆD.9+™Ë¯ppïoL”÷a|ÿÅÑîpP]Û°/Y²„ßþöòó'°dÉt:¹¹¹444pë-· è£¦[QQ!ÍM‚@ÅëâÑiU2BTm$OÚ ÉbµbMš…*¶ç.—»Ã�ÍæÀÖj¡Åf'{”!ð;Y,ÊÊŽôjùÞµk'õ^oXb”$S½…ÛŒ!{pÓ>P´Ù¯M4š:¯G)áÏfeA\cƒéN«Ý”XŽ’J#bü´È\Ÿs.XJyEõ€ °¶}Y:|oìÃb5ìœ&wÖÈ4‰ 4£”‰ƒ ™ÝÜ» Çmé½Ð¤D©DÒ–`—>­{ŽÅH¤þŠ@jŒC¼˜’r�õRæ�ÛØ¯p]oÔYl˜lrâbHKÑfJ>øO?ý 7Üp= ´É¾|Ñ"Θ1ƒÄÄD¾üò n¼ñF.ºHíù|3Ï<“­ß}¸�[,jkjÕÄý!¾˜5J…bÐÜzþ»}›Ý�½í«Åb T½ö ¥RKjzV'bee%W.^Ì”©SÙ¼y3k>ø °Îæ§´¤$,1WW‘äÜOvb úô8@k„�q´‹P8•Ä£¿ «÷uPršñ�D¤åÝb{�fÅ »s"õÏn#éa!ù2Ø §ãó÷c?Јr¼>èëºîsüåWÑb® ºÿžè¸�i·Þ*Ì´¶}Oó±ª�÷i­ø ™&‘ñ§@uE+I))´˜EØJ[,!BÁåõrÈÔŒV*A§TRYYIAÁt–-[ÆŒ3¸óÎ;xä‘ßòÌ3OóÔSOqûí·3wf {öüÀÞ½?pß}÷‘˜˜ˆ!§s-6�FÓíbîŸ}ØíB_¦„XR¥6¢a¾’Ò2$ªf´qq¨”ÂWFVhm#ž~úi^XñJ¥³ÙÌèÜÜNf£ÑÈ!cßÅŒE;¢ú"Ò=µäd$¢Q‡Ÿeä#•�,Ⱥ³&ÍÆ�Üxt<–!}·^ˆXN“ª]Dj®ùåÙècW=–õe¸¾­ƒ‡{~yìåí°…ôõÁ;)Ûg8bl±ºd˜qÍÇÖ†µŸHnÅï®(ebêk[yï})wßÓž£¥TH9Uqajv{hqØinjB¥R‘‘‘Á¶mÛa¬�?ú8`%Þ¸q>ø` avùò¿PPP€ÙlbÉ’%L˜�ß­ŽÚ† Ÿ²qã&ž}öÙn¡0¿H57·:»�-äéC[�Ó¨ÕÌžvI¸¿>ï½÷.kÖ¬¥°°�_þòf–.]Ê[o½Mee%O?ý «V­Âb±°£ä0@�³#wK=i5ÛH‹W’>: B7b”ˆ O“¢Òvµ&œ¿é¡#A‚äÇÎÛ>Àpžý@#Þ&'º;' ](KÃýßR{ûW¸Ž6ÿ«)h8:öÿ¡<'õ¹Y´¼ñÉÿ:�º›¾D>EXTÍNþ·žúû¾AwÿŒÏµ7Ô?q®ÃMÝöYsͧ¤¾³w­…Æßm'åÕs;½�õ«c}î#\Q‹4­ø-Ó$ò×gœüéOr®º²]LçÅïÁ&ŸBI°£ä0g)òbTTTˆ!''0ÃøÏêÕ|¼n;wîbΜ9¬]»†o¼‘«®ú9K–, �Á` ±±�ùóçwÊiòï÷Å_⥗^êu½Æçš!õ DªÎa`c}2™”ØæB!/§6lø”ÄÄDV¯þ{÷þÀìÙ³yä‘ßòꫯ²iÓ&V¬XÁ÷ßïàœ¹sXöç¿`³Ù¸õÖ[X¶l MõŸ§Žˆv<¦#¤Û��—™ˆ&̪ÝQFá‰ÏÈ`Ä ’Ÿ�†ó¼dyÝgXâD%)¯ž ÍB"…„”WÏ å�Ÿp›ìˆãäÄ\?6¦SNN"éù³±í.þí{Úg0üï3�} %ª02¬»â7ƒd¤y¹å I)1´˜ƒ÷Ëé(LFS¥NWÐíBŧP"rØÙ·÷‡€:?«V­ÚÅÉŸ8úÆÊ•¼¿z5Ë—/´<˜3g……E¬[·Ž»ï¾›ùóçsï=÷òþêÕÔÔTóÚk¯3y²P427„œ‘Lƒ(:p”Ûîf?……û˜}ÖÙ¨åbþwéÿ0ýô3;Y�¿Ûº…æ–žþy †ÊÊŽ0yò¦N�­·ÜÂèÜ\îºë.6lø”µk×°lÙ2˜?_oÜÄòåaíÚ5<öè£äçOºn$rØ‘×|O¶¬…\C6ÑÙP”ádÄ RGúÎgjpw¯æ$ÑµÇø}ÍB5ciVç’?Êñzâþg ­oÂøC}§P�¯Ù‰¤Kè%Ø>?[Ûdýïî>üx]Ä2óY¼.OÛc‘G;ntßõÁÝ÷?—¥ïξJ…”ôT=I.7•[H}xzÂ?Súnë&MžÒiíEÈYú ˆ“.^Gaá~”ZFïÝ»—¹sç£Ñpûí·Ðj±à°Û¹é¦›yç�UlÞ¼…§žzŠ÷Þý7ï½÷.+W®ä²Ë1{ö, a†±yó·hcc9sæ,ª±ä§ÆÊáLš4)�Baز²#˜Mf~ÿøï),,â?«Wóù_ðÖ[ofhÏ<ó4……E˜Í¦¶Y\�YZAÁô€Cðu#qu¹¾ÈÍËB¯7%Ê`q\’ŸŽá¼¾ú4)ÇëÇÉ©v±—çáÚkDšïÎuDÈwˆ¹~,õ…2H³ÛŽäõ4þn{`–#¼……ëh ¶5XÖt/S£ž—Ò>ò®¼Œ¦Ã%˜‹‹qÌ{íÃ<¬æî¶]§=‡­¹‘–Ú2<®$²Xtcyq™ }¢$ J¡"“I1èbÉШ¨´Ø¨mµõÙ±4~QúöÇ"’Äbâuñ¤¤¦¢ÑhåO¨-,ÜÏìÙ³yøá‡‰��á‡={˜;wsæÎáš0a¬YÃÝwßM~þòó'Úl¯\¹’÷ß_ͺusæŒ3øéÀ!®\¼˜+/¦¤¤„?ú˜gŸ}ß�UøÑø%Äh4Øl6h­ä½õ›‰‹‹cýúO0�Ì�;—eËþDII �ƒaT Nß{ï½KKK+«V­â»­[xò©§xòÉ'¹÷ž{ÑÆÆÒÜÒBSSS`¶tݨrºôñÑQ”‘Ãq%H~:–(*Û{C­½½D‘­ýN<õ�´¼[LËÅ(Gë;…Á¤)¤9‚•4îžI´¼[Œjn:q÷LÂUbÆúU%¾XI¯ aµ¤×ÏÅù]-²Q±¤}°Óëû‘é4¨NO%îžI�}jyj`û–ЉYÔ‹÷o„´�ÀëÆä"��£â«-!ž!)Êx YóæÑRZ޹ô^—¯Çr‰Pv¦êÃX+÷!v7“žœ@R ¦™ š·³d¦Ž]­»-TÕ ¹G^©P}@¬N@ŸÙkwà®ÂÔŸ“ÿ\ï°Sol ̲Ôê@ÑÖŒŒ 222˜?»ví¤¤¤„­ß}ÇÃ?Ìܹsؼy 4440a‚P�Ãh4’7f ~ô17Þx#�†«®ú9>øü1sæÎeÁ‚ù\~ùϺ­?éâu˜Í&Rt>̦�Y²d ]t™™™”• 74&Läù矎=3“•+W²aç¼ñÆ›˜Mf ¦óŠX½ú? ®»î:@£ŽESý!ºÓ3hÔQ+u”‘Åq)HñNK)p¸²ý¡íz¢¾ ´bžG,íÎ¹Ž¢dß]‹»Ö‚f¡�ò‰«ð'¢»s"5×|JÜÿLAuzj`[åx}`= X´;îÓ]kA=/»}û‡;'6vÄ`ûûèˆËÙ¿ðUìèlbG·ïÏîpÓ\¾ÇQ^—�˨[בž ÐÖïÂÕt±»YXÓËÔÁKÜäfûC¦þzƒqãt¢~÷V¬N/^©EÊXb’Çwk}ÑQ˜Ž4[¨³„o~èºnrÌj¥Õ夦¦§Ã�6.Ž´´t ¦’k; H|¼ŽéÓAzþùçÉÌÌäé§ŸaÊT!±9.N¸¸—–”0qâÊÊÊ8zô(Ÿ~º€Ûo¿Ÿ«ûÚív$b;Âl‹°mE…�`�‘‘�¹­Cò™3gqß}÷QVv”eË–Œ�„|¤Ží$D;‰åŸ‡ÝfÒ„4'Í¢L�ï@–§ÃSgE2IØÖs¬•ôõ—Rÿì6¼eVÄJ)1׎í$v] ¶Þâ1‡^ä´7” )ʼ:h4Nk �{öá¶Ù­<º¶0¯+Þ…§q¿"�íY„ÂA.—wqPÖPwp5V7‰ iB.ú¬S�Ê…õ6™LÊX}©J5?™Lý ãA»8Ä S(ñŠDØ�”rèð!|nO í…ÿbïùY»v-dee’››Ë½÷ÜKSS+W®Ä`ÈaîÜ9<ÿüó<ø P,´²²Ü�…T§‹§¡¡‘KÏçžÅo¼ÉÂ…¢ÓÅc6›xë­·yôÑvëyÇV óç/|o4±Ùl˜Í&ìv;õ]ÎËPˆQUU5V§�ìí/'ã/#•J�È�ê 2©ô„¬�àtv^ûu)e v‡+¬DàFS[pÃP0œî¾»ÞºûÙ©Ýí!–JñºÝˆdá…êa˜J ¾*Ž‹Æ aÛŽZß>©rbÎ3Ðô×Hü¿³h¸ÿ[¼MN’ÿuÒ 5×|Š$Y�z~6š…ª~HÒ‹s‘åh©X°±XŒî�)ˆ´ršþú"­œ˜ËF£Yh öö¯HøÍtÙJì/ÆwsϵôQõÁO8åˆÔ‰qdœ37äí{£úÇ�ä% n±Øžh45aj²J—6…ZÊf eæAh/¶¡Ç u:ð¶YÑûêËTYYIaá~víÚŘ1c¸êªŸóꫯ²ví&OžÂïï»…ù{á£.àíw?ംɌӻ!& Ÿ*“¹ $Ên­#, ‡£“ð8¡³kºZºÝ-õœÒò}›‹.rX¬Vªë̈’&�’;­×m].7^——è/WwhSóBO¶ÝS\ILBø…‘ÅÊðož$]ŒBNQû˜kú©¥y÷<4I—rFb‰0žŽ0´‹¼Ôá#JÆ´ß-i<ú9 -"uSÒOá¨KŽÉ>°º]�ðªhöz@,…˜XD;^‘Kc} Ä'W(P*• 9¼õÖ[ÃÁ{ö’oo¿ýö€CÀ^Sø^d:Äu …ðšÏRÍeÄ·Õo;TgÀåñ„Çÿ~"¹³HD‹×‹/¦oÓ‰«î0â#¤GPŒªªªiñ(‰É>�Ô†�^#“IA¦ ÜLØ[�Ðk�áΨ•jÒòç†w°Ç)ü4WœÐ‚ä§kÅñ Í"RÛÂvíÖês3¨œÿ!YE×€ÉCý³Ûˆ9Ï€s#ª¹=W(W^’…ûX+1×�Å[aÁYÜ=[ß¹¿å9Bxʺ·&lAòy›C‹åý¯ä§”‰1Õ–£jú‘œÔ¡)û*�Ê�Å´�”3qnµ^-ñdòذ{ûô†¿/“ß“ƒLŽL,F'öa6›¹îiùYì IDATºë¸øâ‹1›M»wiII§}X›Íä«¶ï³M€ºÑV¿­©±šQ¹ãP)…äh—ËÝyý,”߯r3u-èãC»Óî §ÓIyU¾Øl'^ƒ65ü²'ÑxxmÈá)‰'²u£ŒþñÓÏ«çe“òÏs†„–w‹iý²Œ´â:Ú°gÇþb|à5q÷LB³Ð€e}Y»›oQN`Û˜kÇ"�W⬰ÐòA1ŠTm'3C¨x=áÍR’›T[¼ƒ ¥T#KŒ‚¡Q«Ñd áØñ€Åz„&suÕ.L¢X\ò\| (êçÕ{¡¾±™ÉD¼J�:VC�±‘ÓƒRÑùÜy½õa¿‡Å룥ŊÕã Ëa(rØ‘Wmçô,Õ€�t�¦&êMV”™ÓH�±p@ûêŠL&¥¡Å-œ%ÀI%H©³T�¬Éìf.ÐÞÔn¹îèÐó‡ïäsÚiý3ÍBCÐY�ÿÒM'÷œËÒ€£îÕ·"˘NbVÏeg£âÖmŸ×Ô×I�µ…¾°;ÜxŽn"CÛ÷¢çHE£V£Q«ñ[%œÎŠ0Ö¸¨'–VUò¸Ìˆ ”Ëëíæü“ÙÄÄÈe�ªÝ­ �Ûw]ÔÕ¶fº'v÷E¤Ì UUÕ´GBÞ\2Oé¹ Æ@éïây”““V�JUÔyÛÿà“m:Z[ªQ6IIÔ� vµ |-B~ˆWÛm[ÿöbWK�ÏK[Ž u”“gÈÄé,çè¶�x¥Z’N=?hBjrg€ÓlÆR]‹­¾O›ÃÇërãlu ‹�é¶�žè¢‹ÑŽüYQ8ÈårÒÓÓh÷òÙ©«ÛJ]��fŸ³2I|Π̠:®k¹$ƒ¿)1*,.'­`1ZõÀ�”}ÑWƒ·(''­ ™Ûþù©PU€ HO÷†VØUÜöÕßçA¸hú+N4–m º¹‰~¢ B½½N§C®Óʸ>Þ¡wj‹wç3s„è"Arr2É�ºµM»¨®i¢Ù'§Y–Œ(qlÄj° 8é(FJ«É˜qý õyŠ2HŽ¯ÎÆ½ýÔ¡ca×ýmÝmûÝ#Lô º¶÷1Q¹ûMZ½1èrg¡‰ï£¼žè¢;9Ä(��ÐhÚ…¹±‰f—3êA óE’H8é,V+�2gþ"‚GÖ7á´¸öHBkßåø%*H}Ný¼HãŸ�YLÛ©:h­�øÜÙÝ*„‹?Dçm8HJÖ‹œN'õ X�Þ!;7ƒIW�;�¦]4›š1;ĘQã�ÆáÖ¦EÜÑ6pÒ5šš0zõdœ67rÇeÈ©«7b4™q»{__ÉD)D:ÖÏ+âY“Fí/½ã¦²h�ÞbG�†6)«_û«?²‹XWý€×‹,V+F7êŒIÄO[ˆõÇ�t¬DÞÓk4j5«5Pß.A3$çq t©vGŸ±ÆE³ON«4g\ö�ˆT¤œtuuuXu“IËÎ�àÑER<>ùìk@¨s(W¿!¼¨ õÿ¬iG[^SDZ¯‡H`ÖÔ²‡ª’/Ú5ùCtiZ߀W“+«ªpÄæ“1½çu®ß,ÿ7KoZÐIlÞög6½õ;´ã.DŸ‚ÓÚBiå¡@�¼„¸Øã ÜÕÑàt£¡¡1 R‘‚VU¾0mû=án©Gc< ô/7°dײò*d£Î&1Å‘cëRiMäN µ’HRUßL–aJ ÷×ñLT�€?¯©c¯&5ˆÁ&جI�1©ÇêٶƼ�{#¢+.«@wê%Äi;Û�%²XÀø¹Åj§¬J˜Ùœjšp8… ³L*Åãœ�rul›�C7‡µ™’êø�%H<6´jé�œÓHÐÝÕBȯ èŸÈŠv| ‡HuU�•‡>/ž�ö/ò;éCà¤ë —ËÝ­DO�°„N1‚¨ E ÿ¬©±Ã¬©k ½ÁÂ?kr:qtÛfÐÐ öñ–Š=¤I\բ˘qc¯Û5ÍœzÉÃXmÖ}½mŒ µRŽN«æ7· Íår9wð) µV¨�ÖVÍårSV}GC §µ\r�¯‘B¸3¾ô¦ŸÛ„jñ †œt"ÕÍu¤8é¼®ð¬ðbÅð‰çH&F×ÿÎÎ#�¨ E˜Ž³& ½Pìã‘ Ý>l•V1:mœ¢ uuu´ªÆõ¢·µ¬Ð'è¨Ýò2¾ÝÇôülô :,V+v»³SøÎã­‚¹L&%1;:¬sTÖ–ÑZ¹/ Pqº¸!ÿ¡b0ªr—“®'¼jEÿK\Eh5‡_d¤¤A¤£}üÀöýC:kìã‘ ÑiÇ]HrÖs‰TXÈ·X­üëƒÍÜsí¼¶z#÷?ó&ÿ{ë¥vcH¯Ë3dÒhü�꣛ñJµ!'áJ¤ÂÕ¥`ÂhâbH™u'ë_]  ‹+F„èöå䓊9®Ã|#ÅI×—#,A’)Â(—å¸dä~ZO2tèˆ!†§ŸËþ*]QÅÒ£¬_ˇ�?Ôh4óàso³î•Ð'èÈ›ÿ¾ÝÇü³&…ôúöšzíI¸^©YÜ(tcƒV$÷JTØíN4j5«–ßC£ÑÜ))—ËÙ÷ásíÛ»BsÙ Áœ|k3e Çp�á³Ö#ûЪ¥ètºjò›FŠ“.R8�NˆN�‚#™ŸÅþ¤€_ŒšMbÒR|Ä©,Xò“Ñ[U|Ó:žÓ”‡PÙ½! Ó΢r ÚBe nyŽ�ÞÈü³&J÷„C{.€)P‘Ü+Õ›Q€6mJ…k[²+Ð÷ºX˜y(C�B­EÑE¤\.7õÆ ¬ ex­õH<¶a;/+¯Â!Õ‘�7—´ØÁë_I¼öfqÒãr»‘ÄF‹«žèDi˜É$“m_Æðå--«æ�oUЊ•VÀpZ+µŒÂŒñÞCjí=–*úÍòsÎé§’Ÿ—Áí¿�’£5¼ðèuä2Ù²û «Ö}rè®':Íž¬{1ïÞD«7YÜ('¸•W&“vsô�àê«1Vânª²�Ÿ¿›«,%Ÿ”Óç ÚûŒdŠ“C�D>WXÛ‹e#³ }ˆ Ò0áŸ9ì"îXh`ô8 ¥�VZ;õiêJ\ú8¨ÝÛcÈè—WÌæü›—ñùëK¹áò³Ù¸½ˆÊºf¾Ù¹‘7×|Ãÿö«ˆþþzn&œŠîÍOÚ]}Ó�ŒM(Üf ÙOŽv:�«ªÁ-O$qüùdž22 ‘Æîï"}<ãqŸ<¿kW¢‚4 øÅ¨Ù$Aïá•õeœ:ÍÖ§Ål"£ú]L[v$9ACž!“'�7×|Ë©c2Yÿ÷‡=¬ÔU(�fÖ|õåÕ�8œ.Z¬vn¾ül &ŒîaÁq¹FæÌËíé¥Ô¿X�6#2òiÜý^Èûl45aj²í5pÝ^pû”È’Ç šx>2‰/`@rñp#¬!†~ r9lxÅ}/$I%áÕ�*F²Ád¤=CCŒ_Œî¸Ð@ñ~%_V`Æy­}ÏŒv–“ëv£R‚¨ÕâàÎÇÿÅ×+ƒ>AÇü³&ñáÆÝ\»ôÖ¼ø×\ÖMŒ�f~½ü=ΘœÇC7_À¢»ÿŸ__Ç‹�ÝÈ;o¥²ÎÄÛºéyÓf’vªPuÁim¡¸l4—¡–‹IJL´œšÌT=*•ó_¼à çÞÀç¯ ‰²âA,4âðt ¾õŒRý³Œ2r)(˜ÎúõŸ�••ø~×®�”–”0:7£ÑÈ÷ßïà´ÓNçý÷ßyßÑOþ Ò1¿(yŒ„?¼RÅ‚kL!™ õµ$™étØìNŠËª�½½ìμú &æeuZ/ò7ÒSuh¤'WÇ’vêÜÀϵՇ±Vì:µÂìÉo1èæ‹øÕuçw?‘³9¢ï5¢ ±ÕpB%:F9yذacÆŒatn.ÕÕU¼ñÆ›dffb0Œ yQA$tè�Ùc¹ãra0^ù¤ŒËnê{f·³œ|©M—ºj~}G*ë¹rþé¬|ö6ξî)Þùx+×\<�ZÍû/=BC]»H—UB•îø´1�.³ƒ1{Zt÷_ðx¼H$‚eìçÎV£ÅHÇ'Q i&J”ÁÂ`ÈáÓO7„¼}T�ÿ̨p¿’ýß«xì%¡C_ëEñ_îdJJf7Xòà fNË¥s§ñ«§Þä‰_-fÝ+0ãš'kH¥`ÂhÆej—© ¹«k0cöôX[ï#€S+}c=c ©aïçxÇãq3°Ê„'>ÏÉ›os¢ãw/.]º”É“'‡üº¨ E˜L2)ü^Ek³„çµ²¥ApVõ&F"³”œ»É3tÎÍñ›¬v'÷\{¯­ÞÈ„¼LΚ6}‚Ž/¿‡Uë¾ äô4Í4Érzíꑘ=uÍ7JŒ�áý ;(˜0Ÿ\{ÒÌÄD/¾QNlÆŒÃÆ�›˜5k6¯½özàñøøÐod£‚!³¢ïU\7;—ùWšCÊ/êɼ‚“înXHé±:~³ü߬Z~«•ß,ÿ7Ï=xuà‚_\V�&÷<’C¨ÊÝ"1{²X­|½£Ýúì•Å22S£D‰ ÷ßàû«®ú9‡æé§Ÿæ²Ë.¥©©‰Y³f³bÅŠ�÷¤ÐѼ�’éâž?Ôò‹ûBZ/Ês»Ñ÷ÐŽaÞ̉ì/>Æè¬d”V±æÅ°X­\»ô=¹´¸¬ý¤+‚VàîÛë=üâ SÀ!çGÙsz|ª’ ³:ÏžJ+áiÜßMœòæ?€ËÕnyžrÊ(^{òæˆg”(Q†—|°ÓÏ�<òÛnÛ<ûì³¼óö›!í/XÄD–�™æ|¥ìµþßI‡^S¿^’Å)ÓlÜ÷t-Z²kAz÷ºok¾ØÉù3OE£Vs°¢™%÷ý‘Ïþ±”{Ÿ~‹­{ŠÑÇÇðØ�—³hžà÷?XÑLÆôŸEôwú䘋%›¬$Iº‡™ê=Bù³|Ü�Õ^ÎÇçò Ž×cÚóVÈýŽ�fJ%Óº=îé­ÏqˆÇeg¼üPÈ…VwîkÁ�9a��jø‘V2}Rh7Q�¦&Žxóp‹N¬«R©#p»Û?óRŸ�STe!—ùÚ]!‚ø‘�H}Åå—Q^Q}`¬m_–ßÛ{t†4ü3£µkâØöU 7>Ô„f^(ÈBmw?¹’œŒ$ºù"œN'Ûöæw[Íã÷^ÁÏÎ? ™D‚±¹•UËïé´‹ÕJ•]; 1jسÓá²n�WyôÀDb½vVÊö7"ãïJ}±üå'7çoéôºÔ‚©Ýöµà¡ÿ‘R!G­Öœâu1\:wóÏšD|’«äøîrÙk3=òöqñ¤�:²/0‘ ÒZå ?¹cO=)êÁ9¬ÍPSòö±* i¹Ùƒw@CHÔøÓO2ɤìû$Žz¹ì&#Û›Š˜p^M¯bäi01ú³}œžÕ¾ÐÿÙæ}ì.:¤KÃ×Ûð܃WóŸ¿ÝÛk¾eÁ-Ï‘Ÿ—É»Ÿìì´Ÿºº:êe£;­éô�«ï…v¥ÈøJ9xVúS`æTïëÛÔ�ÃÅçLã±;qÉ9Ó¨¬52{êX–.[Å–ÝOšäX¥"ôÚdQºãq9N 1:Ù‰ R˜èБI&_­ÕrÝì\þûN.eK¯!:å‘F&Vv g]qÁéœ}Úxþó·{øëë3Š5/>Àÿܰ�ï÷—’ؾ¸¬_Öy$f OHg—OÛÅÒ¹·×ÛYà�Âù¸çÚ (˜0šk.žÉmk_Ë–.áëí?�­aŽzxñFíÍQ¢„Dô–# :šÔ1^nz¨ž;« ݼ¤R÷•óOç�çÞ⎫çñ£×qþÍËXxû_¸`ö$ž¸{Q§–ß¡&»Fб’—Ý9�Ÿ ½ZÊÄÂïoð¶¢”z;mï Ò"â`Yu§.µ›÷böÔ±@tÖ%J”ÎD)Dtè°Uëxüþtæ]ÑÄ‚«šB²uǹ“|}j§JÝ)˜0S³•×Voäù7?åó×—’žœÀ_ßø cs+úÝ€’]B½GÆ¿èRöÃI¿•è¶}“R�¢C�b}‚Ž›~6‡ü‹&51ŽÆ¦VNk›)møvçœ~ ¨Nü†~ž¼‹n”(‘"*H!àŸ½¶BÏk´ÜøP=j¥îîÉ®J¥¼“ƒfáœ)<ÿæ§�~F�¶U8h4š1’HÆô¹ü�B#Iâbª¯½2w†ÈÎT±™âžûñ¨åbœN'G«êÈ3d2Ö©ÌŸu*¥ÇŒd$kIKÒát:™Ö$�f¼²ÈXÕ£œØtt¡E9q‰ Rd’ɱB/²1"nz¨�%÷4¢J3SÑÏd×eÿú”Éã²;Õrûå³Y¿é‡nÉ¥�JÝmù>CM¬×ÎSòÐ�Pj·ÐbâhU<÷oV>s ·<ú:§0Cpy<¸\žøÕbÍ›Ž±¹Å î°ð8mÃ}Q¢DM =à7/¬ýW—LâÓwâÑÆ{P¥™{ Ñùeú�ÚsqÎ9ýT>úzw§ÇüÛúM ¬ÉÇ\H>=· ÷7y†L>zå!&ŒËfÛ{O°í½'ØõŸ§yø¶K±ÙCoÅp2"Vj‡û¢D¢3¤ t4/ØìpåmÆ�ÚFÄí,g¢TÒ­R÷k«7röô1Bë¬IÜþûîIÇÃuCe^ˆ›<…¸ÉSº=žZfƒï½HcãÈšQXû4íò–�fʪŒ˜Ì­�„vïÁrfL>~D6RȆ¹-ûˆÄãBKþŒrrÐc¥†Ic C},Q¢D‰ådßá²�*5DCvQ¢D‰eDÐkÁçóáõúðáªã‰Ò"Äb"‘0™�ŽÉð“‘GtLF]Ç$z$ŸlÍV;.—;:¬Ã€�ɤhU*TJ¡òvtL†—蘌<¢c2ò6&¡Ð£ y½^Z¬´r’ÂR¹(‘Áçóq¤Öˆ©Å†B.T5ˆŽÉð“‘GtLFÁÆ$z$Ÿ§ËENr<‡3z—1 ˆD�“O­± ŸO>DÇdx‰ŽÉÈ#:&#�®c*½š|m{öïîÖ;~ýÿ÷ùètþ¡û˜DZ¢c2òˆŽÉÈ#ؘ„B�¶ïS YT7š˜1>‹ÃÉ­wþ’¼mÚ7TøÏ·F!cÛ�2Òõñø Ó˜D¢c2òˆŽÉÈ£ã˜üXv,R ú„)ðßÃ#�NGL|"š„dT!ùÍf±b1ÖÑjjÀbî9Á4Jûù>ÛíÛ;=ÿƒGÇ$(NÎûr+›gO§YÓÇ+N†sL¢'ŒH]€>ÉëðqÛ�·ð÷—ÿÙç%Rã'’™;ŽÑã§‘’¤'¥­ŸO­©•ÚúFJì¦¢ä •öãqG{Åþ½Aþ¤ücŒèù|“H×Ô¬-»Y´t©ðÀ²e|yÞ™8}7J<Ñ®1‰Ò3ÁƤ/B›!ùàÕ—ú#MœÃäéäÌå´‰c)¬´òc­‡åfD@ŒBBbl‹.½œï÷¢(>�²½;±4EïÖ»òêKÿÄëíi@}Aï>¢çð wL"E\S ³¶v#¾_¶Œ/Î=¹Ei¸Æ$JÏô<&½Óg¥Ÿ|^·ßuK¯ÛI¤2 “§³pѵäää²v�‹KJ|¬Š¬Ä2ô1Äh”49$¬Ýc&''—…‹®Å0y:i´Q[Wn»ë<^‚ÞàùǤ#Ñó?øø ¬1‰qM-Ìn£¦Í›�?ü�EK—2ï«ïPœ¤k%Ã5&Qz¦·1鋾 ¼òÒ?ñµ½G°¯ÌS&’_0±TÉö#VrÓ´hÕ2ªêšùpÓ>üæ5Í(¤bRtj6nE,U’_0—ÌS&öºï“ñëåÿh;ûÝGÕ?&¡œ¥L‚B&A&#‹£ç_Â]_èc‰/m1²ïÝKŒ^ßé};Š’¼Íâ|2} ǘ Û—$™ _Æÿž“€x¸�¥ŸcÒ}‡ì|àóù¸ýÎ[{ ÛÅèâÉÌÇiDzv�™¼ô8dR‰˜=«yæÖYx}ðÈ?¶�™¢Å‡��‚o5sù´±TGCùZÍÁ¿)ò®ãÉ PõpˆGVþŽ¿nkéǯaDj¦>ø×[^åá—bïçn|>¸ãî[xé…ô—jŸW„HÔûù.�ŸÏ‡??ð„=ÿˆP¤MeÁå󘑟FŒ GøaãzÖ~}˜–Pú¼IôÌ}ä7œùÝsüé‹F<cC„0&‘ ®¹…³ÚÄÈ}ø0ò¸8Äk–-„�]ÃÚµQbÙ2>?§—ð]�ŸOcoyœ{?àÑ?î yd dŸ ǘô�yÊD.¸lgLÈB'l�þa+Ÿ}ô Œ¨áëðÿ£>Ǥú$¿Ö­xáU¤qPŸxL‚žÑã§QXa%3QƒXˆ„äZ‹Í)Äq}`µ9ñx}—χJ!£°ÂÊèñÓ8¼÷{ZÍÆ {ç±�ùë3‘vzs%9ý’+Çe{‰µ_jy|=|ÞÜ^/¾ð÷÷â·×ƒT"îõü{ýçÛëÃãñ�àçäçq÷#“|ø+>XñÇZ¤$�2“K~v7¿Î|�?½¹Ÿo_{éü—ïÿ㡌É@¯qÍ­1òUU!Ž�Eœ’šeËøéâ…Äjµ¬Y¶ŒEK—R×M”fô J=}>�ƒ+]†cLBAžq.÷<| iǶðñëk(mp ‹Ïä”3ç°øâ2þøf ý®Žìq eLú"´&->¸ûÞÛxé…¿#–ˆ»Ýmhôɤ$éù±ÖC‚VAñ1#»Vc³»À×vaô ®—÷>Û�B!cì¨$’õ±Ô6»™�¦G£OÆWZüíí&ªÊ;Þ½‹Ñ\Ï…“|÷ÂÿcK½p×!R�bÎ5W±à´ bD.ü†ÿ¾õ {�BÇÒ^Ÿ—$3ÿw¿¦`Ç¿Ù5êBLÒ#2±îïo³Å7�«oXÈ´t%­ÅŸó¯W×s°µ÷ÓíŸbÏÿݯ™¾û?ìË>—³Æ'¡rT°õ�ñþ÷�¸»¾Æ^�pµ¼ûÞÛ¢Ôã·MBïç߇pþ}mwŒ'ìù—è™ñ‹…ª>â™_RÝf ¬¬(ãp­ˆGïú9—l-æí²®zê^Rß~”¿ím›'(Æsë¯Ã¶âOì¹ð®È�ÀâÇø¿Å€e;wÜ÷voÃÝmL‚ý�„JfUS÷ÄÈd• q|9•Ì)ÓXóë_³héRjºˆÒg=ŠRû¡ö&Iƒ2V²D¦-ºŠËf�E¯kå|þï÷ø²ØJŸ÷�µÃßIß ÿ tLBB¢gÆõa¨Ydzùœ*¿�µ¢‚’ýßó•VŠ)©ç\Í5çM`t¢¼-”ïØÀªw¶PáV$Kdꥋ¹äìñ$)ÀÝt”mï¾Îû{ýc“Íœ[oç‚”Ö ¶t¼žDè‡KXcÒ !Î�`EÛÅÑëõ"‰‰ÛGV¥Ñ�Ãö£fbÕ^vþTÅÓ·Ì |Ƚ^ᢸüî9x}‚óåál&N«¦Éâ"åÔDTMÈŠ*˘Ë-7Mĸö/¼÷c«p¢ÅqÜt'‹3 yç/opЖʙ×þ‚[åáÙ§×Sáéãy¯©ùùZœIDATp:Òç]@å‡ï²l­›Ü‹~ÉÏ﹕ü3ûV¯`½=ƒóo»†ë/*äñw�½Óé~#%íÜÓÙ½âoüf…ý™7²ôº+9xðïìjn@ŸO˜¹øYÑç ©ý{ULïçß/J¾¶›ƒõü‹ãÆs†ýs;Õ®ŽçÎKËO_³ÍXÀ™g¦ó^™§ÛylÇNáKϰú‘‡™¹õYžú¬O—�B“`'¡â#l6Db1ÄűfÙ2KÄš‘ÎôSòQ«TØív o¼ÁšnDiÍšN¢ôႳƒg°ß½Ó÷}�eÆJ¤á”kîåºìý¼»â?2IÉœq97Ü}Íx…m¦Ð>}]ÿN‚ÇÇ"5&¡ Ñ�Ê™£|øûVª\]�Ƀ¥ÙÈûjغjÿ¯¦qÂ8λ~1w\QÅ«JqˆÔœrí}Ü<±’u¯/çûc6©£1ªHI?ÿB²>þ€¿~l!qæÕÜ|}Ûõ¤E‘s.áŒI_„Üéî{o ¼‹þñâóBG_¥ÏçÃêp wâÄD"|>pº½T›m¸ÃTUQÌ8®¸ûR’‹ÞáïŸUâlÛ¹$~"ó&zØñÿV³¥¸ŽúŠ}¬û×zªRf1w”¼ÏçýØŠþË»_¢²²”­ë¶Ò“�í“÷ùêÇ ªKwòÉ—ÕhÆçòÿÛ;óø¨ª³?wÖìd'„lDaŠ .(J]T°ˆÑ h[·~ÚŸ¶~­RTµj±h´Õj-Š+‚ˆ"Š"û¾„={B’IæÎ½çûcf’ÉdÖ,Èy~f2çÞ÷¾÷}gî{öo ]çãß/féÎãhB¥xÝ ¶ëY J3»�†¦éhZs£5Ú;ÜM¶]Üþ¦øt¨¢èh}˃ZÎÞRAt�d"‚=�\A[x2üNaÐ= )6[c0sç`0€!ƒÏ"¯O2228ãŒÞ$ NŸ�?æíçŸ'íšk°ëÁü©`|'sÿö,/4¦'™uvDc“VGøÊÐmWž­²ì‹X³ó奇Øðé»,©Ìå‚~!lÙîçw­ôI¨ãÓ‰§Š¢â†*Ú9øÕR¾Ýr€âò ŽîZÃûïlÅ2h0if0ÄæÊ3?-,äÓŸPR^ÊÁ-kùfs%îîOÛ–ÿòΗÛ8xäë?ù„-z&ƒÒÌAmÜîa¸=|âEÈû*{7 šÐQ[M-%•µt‹4±óH ñ qÌž¿Uu`Pæþú"„€ÙÏ/G�Ål"#=‘(‹‰¬äJªj©¯­ ®„1‰s§Nå|Ç æ-ü‘ �jcb‰¢„e›¾ Zåv�";-³8ß°@£bOIcÉ[·UQ¯U²ÿ˜{�F[… ¬ÑX @(ä88~¤ªéP½�j»‰³³ÁŸ6×ya« lµ£®fÿ tg_‘ÐtZûõˆyþN”Æ" óñ`„Ç“ÂäQ@PY4gÆ,Àa2sÞˆsˆ��÷�íÔ2>>ž¤5kxûœs¸ñž{‚i„¶ë}ž{wŸG ÓLöÕ3¸Áµ›x0_¶ÆW¦äÞ¤X’éõÈ_ë¥QIRPå­fãB©nß´áú¤}Qˆí;š¯»�A±4–«ì‰2€)9‡då(+ö×ù¹g�ŠÝ%44:¦†Šz3ÉV%¨��Tµè&‹ô‰›à+5è:B~=s:óŸ{Ù—ŽT—£´¬œÌ¤TŽT©Äv�#+­Š_}·³qÔ…\zn߯f#]²’Ì”–SUr U ð„Q"è5n“úäß�-bKusÓÐÑT Uu™JÑÑq>dÔ ùvUGÝ¡¡ª`P�÷îP5—n n�Ÿyë¨;›wtÝ™¯;ÿÖÕ&™(šÓ‘º@PBsÛ[÷QâuûÄM ûœÿœ×õh¶;Ý쯕¢‚sÉL6ãØëUJ5w#;Y¡vk15vÍ9XÓ›îÙ$œ6rm§­<Þ{Ù?˜O¼qË Ö�¯xøàÙÿ¼GæÂ×Ð�F† '&&MkÊwnBçhMJâò-[x»ÿÆ ¤Úµæ«Uº¾Ÿ¢æûvíÃÖ˜aÅT£A¤@U5à+‡&Pôý,üíÓ¬®jÿÞŒŽôIÈ:”¤‚2M-¿.”˜!ÜKù¾¾�ÞùÁ|Ù_ÙKörŒ³8;/†ÕßWwHéÚ'ê:ŽŠ-¬Ú7‘®<—–r¨Y�ÉHtœ 51— sï.Ý‘HÈJ'ÚP†ì%û(ƒœÅš µ-ôô<9Y6nOB˜ëüïž™Óý~ûªËÊÙ»c¶îâÜÞ±DE˜ˆ²šˆ²œ—Æ£¯­æÑ×V3$/�h×çÑVçœÃÏ[w±wç6ªËÊýÊ7uÅô; 0¬û„•ñdfg’í‘zÆ[ÐË7ðù##yôN%9ãL®š6ŽžG¿aÙ>;Z�üO:$”_"þE†‡½ý½ím5m5z¤ÓØþŽ2V-ü˜ý=¯æw3¯fd¿LzöÌå¬Ënáþ»ÏƱê_¼¿£Ô2¶î¨#ó¢zZKwFL¸ŒLw5Òa£¬\'©_éñ±ÄDY›]'Ÿ´%m·šùà† $%:'Áöë—Oÿþý0 ?ôGÓ4gé_1`̹%û20XBðÁ Øa íûéãóŽð•^±žWÕ3pê4®-È¡{bi95a÷0µÙfí“�’£Œo~ÌÞŒ«yà·×sÉ�\²zfrÆ s¸úÎûyh|&ÆÊÔêÝÚ7£P°¦�àºq=›Ùé£5†Ý~+W É %!™¬þ#50cÿu´�ÛÃ'Á>ÊN€@ðܼ¿ç¯�•qÕÄ˹îÞÑΉ±e{øáÝçxéœ-õì|ï >¿k2¿ñJԪìût)›Ïã’]ÇÖ>a×Ýytî�Pû·ßSØÌþ¡ø¤­¸››,–¦�Š¢ ëzcsÔá²R��{JÉMMTºÇDh‰^ßÏæŸ7æèà+Qæ¹¼P}ã§ü†±Q€½’ý›¾eQ�ÖfÛ�(ŸÑ‚ú¢Ï™ûè1®˜p9W̸€n& ¾”?|Ã?í¥®b/ ßèÍŒ)�òü­õÔ”íä«�&ïí´±ð^©»‘ Óà 8*÷ñÍ?·žt°�öF+.t?¤3s38nk`æ¬é<7/p3RlB Îeøy£˜åu:uv›êì@Œ0ˆ¶BB¤Âæí»ùnÕ2zf¤cP |±dUGŠj×\“Ë·½c#­lØs°Ù>/nŸx#íbÇ'­A�55�—^x™wO笳†`¢A4“nºÏÙd÷·×YYvÇÿÌòÊÁŒLØÍãÏâWÓ§a;z£1äA´§<íIøxú¤ÝöCr÷9Ì{6p0¨*«`í²%T”•°k[† ;‡”¤2ã�‹ÎÔÔÙ(-­`źoÙ¹u3Û·lfĨQ0åÖ)¾AåÁ"ôSô¡¸àó›ý=mê¯[-Ëmo_�²nŸx#í??øA´Í/žOZ#Û¡éX=®ã®áêôÀVï¬õèу‹Î+`Ld4‘Æhƒ™’#Mç4¨*Š¥YíøDÙçdБ>‘´Žp¶.wÒö ˜9ëΠÍvªjgówk8°s'?¯ý–ä´4"cœûñÔ?Nñ‘C”=JYq1Šb`Ãú ÔÕØˆíÃäÉS(,|�ʃÐÕS¯d3mêÝí&«ÉÞ¾œ*ü|.íbÏ'aI:šæp½o�ÀJddÓ襪ŠR”ʲfç———»µÐçÄÙçdÐq>‘´–Hî%gæ=<¹K$B@ei)å%%ìÚ¼É9<Õ=„Ö• ée‡  �>½óXûý&O¾•ÂÂ×)?е›�Üööµz¾Û'ÞHûŸÂñI¸9‹…øøxºu놂{Ù…””jkk7n\‹ó£¢œ“‰ c—ªt¤O$­£5;„<ì{öì;y6HP( xw�+ÿŠ‚â®J µ¾žÊÇ٠�Å®ŸÄÂ, öØá0oçô!˜½}—¥ýO&íòìS ®¾Ÿ_MŸÀ—_.ovÈÒeKƒŠ1™ŒÐ¸ÜL×¥«ßÿ©Fˆ+5ž}ö¥ G)гD¢(`@A(®fáúaxLŒ€4]G³7Puô;�ÜÜ\ŽC1ºwüèš·wKÛHûŸlÚn/E“ÑÀñÃEèºÀáа;Tìª]Ó]£çœ~4 (Š‚¢(˜M&LF#‹ £Áà:FúOÚàÔ"„•œ¹Ù÷ÎàÙg‚%'®Õ„«ý[iúZxëB`0Ðu�®Ú©>z„]�½{öR_UÑ¥«Ûn{ûšììö‰¤ý;’Öù$Œ#˜ŒF"¬çªØÝAÉíOw`rÓÕ|×ñ>‘„K+juPa#'Îæn¥ùßÞÇ(Šsf®ÇB™ eÅa]çt¥ÉÞþ:k#íß‘´Î'áâéCã‰ÛaîåÄøDáÛ?¤-Ì…Ìž}§|= ¯þ¦ßzP�é'é“Η¤O:_jE@ 81öhY}2Ó¨«·Ë²ÆI@¢#,ì8p”® Ò''é“·ôIçÃÛ'¡NŒõ[C2( ‹™cÕºÓ Ä?:p¬¼«Å9ÁQúää#}Òù�>é|xû$Tüö! b#"8n³Q]ãooIG¢³‰ØÈH gÙAúää"}Òù�>é|øòI(ø HŠ‘¬3BÈrÆÉBQ  Jãøé““�ôIçCú¤óáí“P8ÊNQŒF…0v:—t0Ò'�é“·ôÉ©‰ô–D"‘H:kHºèšîšåb’H$É)Žs>>F£±}šìt!hhP9V^E]C=B$‰D"‘„€¢@”5‚ìîɘ-Æà'¸ð�4�âÊ*nþåTÆO˜ˆÉâ²w‰D"éÒ8>Zü!… ^!?;=äóüFÔÚê?a"yyyí¡£D"‘Hº÷̜ŠÏÏÃd½ÍÎÿ ×^"²f$‘H$’p1›ÍawõÈQv‰D"éÈ€$‘H$’N� H‰D"é´o@Òóþ¤4R⢹êƒJׇµ¬r"õëNJ\4)qÉ }' ÖUùYø°–µ¿ÎrÛ”roûšÚPåi¥¬|r"#Ò¢I‰ëÆÀËfóÞn[ˆò5›Þàþ±ùdÆE“—ÊYcÿÀººÖÜ�Ê¡bÊè!ôMˆ&%îl^Ø£6e×­âžìèú¤ÄÅsÃgÕ bÉ“·ñ‹!餯E“’�Å…7ÿ™åGTŸWkýÚ/H~(ú“/‘Hº$í8bÁÁ¡wîá�{‡‘Êf9ÆÄnzlr’1ßÎgý ^uœŒ�o2&ÑçÖqX žâ½¹#‰rÿ�Ô›È�äi(¼…I)ææWVP˜_Á§ÿ;™×F’»æÏ � .ß¾çU&�~€â«þÀüÏ%ÃZMÑöJb•ÖÜ�@­Sèyám<<ö+¬¨yvÄüt·Ûݽ:%‹ï`Òs=™44~â“/«xÛ3Ü{vÖc+xéw�qýuVVy},-­×6ýƒÙÏ8_ßDß çGþ–I$’®…9+£‡sÞpÑ++CìÞ½[„‚}ßkbbßKÅ‹?| nLŠ¿XTá÷؆ �Š¡qýÄ7Ø|äÖˆïîΙã?Õ!]ÙK^ÃV1gH”è?û[QëÊW‹^—ÅwÓ¾¬._¯_Lé!²~ñ–8ìhÅõ`ûá>1 n˜˜¿Ûîÿ u¿Xxq¬È¹éQ®ûTP”t­è{¾xã Ûª0ûµo}Ã>_"‘œªôÊÊ·\q‘ÈÊè!€ñÀX`Pôr€T 0·O“�}7oÜõ¶™/1-/"à¡ÚñÝ|ùÖbަ_Ê%9V?G l_ÜÀqѤ$dsñ/ŸfU‰#$y¢z#_ïµræ˜þ¸ Û¦Ôs•YÃúUE؃ɷmä¿ËëÈ~„¿\Þ‡ì¤$òG\Ç_–ÆW#Yh÷:êþ÷Y°.Ž+î8ŸŸÃ÷[=""‰¤(îk£þÁì×’}ýëš$IW¤šìØõê<­ÝÇâÛû`iØëó¨ãK®%âç'a4O|ö#c}=qM¤\t/OŒÄàœhjw|Ê‹¿„ñã_/ý }­�å©%‡©qôIð¸5S<™ñPu ½ÊÏ«9ÈžJ•õO½DÆŸ_âÃg¢Øöƽ̞8eõjæý„iË-`k÷ëxzx¬Ï#ôŠÌyt%©S>ã‚ø–×mÔ?˜ý꫃Ù<[½õuì ï|‰DÒu+ U.KþÍ_£Лß|»–ûÌ/r÷Ó&îýâvr-@ƒïs£GÎcÙê jK¶±tþƒ?/�Jº 1YäÌ3tH òobþŠ'¸t|ÁêQy�£¼ÎžÒ¦f;ò.¹0�¥šÃM|ŽJTB·ÌŸ7ì)ßл;©‘P< ‡·bœ™ ö–£®Êýø£fÝ«¼w¸/3nÎÇ»ñOÔmâ•IcxÒ6“ÿ|8‹�Q¾¯bˆj›þÁìš}ýék ñ|‰DÒõ«8oˆÎ¤O~>}óóéÛ·‰V…ØK^æëÕß±Â�¾xšáôľ~íZR}-ôªÙQu�®‡¶®DÝŽ•ìÉôJòó¸ò�§Ä âÂ^ lX²…:W¶£x +Ä0dd–Ïæ fò£úrI?eÛŠ¨u«×p˜ÍG ©W"æ ×o5¢’5¯,¢rð¯¸6·¹–¢n3¯NºŒÇË~ÅÛÿ}ˆ‚¸nk£þÁìg Á¾�ôm�$I×¥U£ì©þ¼ù(»ÚïÅ3÷ÿŸ(\ü•XûÃwbÕÇÿû?i"9õjñïC!„Ml|ê1vê[¢Hu?÷¾ÇÄ–‹µß¯ËÞ|DLÌŽ)ç=%¶Ö‡"OE¯�=㇊ÞýAìØø…˜wušHø XW‚|¡‰Ò�&‹Þ±}Äô¿¯Ûv¬<%Ÿ»" Yóò%tkëÀ;‰D"9EÉÍÎä¼�½ùzÃvŠ™Ø€:Wªõxoêer{S¿›¯¶årç›çË`$‘H$a R{1„ÇÖ®<ÙZH$É)‡\í["‘H$��$‰DÒ)ð�Pp8|¯!'‘H$‰?TUE ³Ýo@R€˜ÈH>Zü!ª*|‘H$Ih¨ªÊ‚W_!.*G øö=(7„ ¨¤œZ› цE$‰DÒuPˆ‰Œ /3 ‡.øqûž¶ ûV f£‘�9é rü²D"‘HBÇ¡ TÍ÷^Ú¾ð�6ìÚ×:I$‰DÎÅþ®¤º+ WòÙdg¬8…Žôxu¿�påû\wH"‘H$/Tœ›Õ»’Í•ê=^üÕ�ÎÈ¥áŒf*`¤)€ ×ç‰D"‘Ã�3 5všjKîš’ßMvîê“î:Áè:Ù3i~ΕH$‰ÄwÅÆŽ3(y6ß56Ûù *îÚ‘†ï`äT‰D"‘ÃKÜÉ]KrÇB«!ù F*r•‰D"‘„†;ž¸S«jHžÁȳOÉ€ H‰D" ÷ˆ:w ñ| «†ä~o¤y0’““$‰D î8â˜<_Ö�ÍLJ+4Õ˜<“D"‘H$Á^I§eœñT”_%‰D" ìõÿº‘ûãŸÑIEND®B`‚